2012-03-14 14 views
10

C++での純粋なCとCの違いは何ですか? そして、私はLuaが基づいている 'Clean C'についていくつかの詳細を知りたいと思います。誰もがこれらの機能を知っていますか?"Clean C"とは何ですか?また、標準Cとはどのように違いますか?

+0

尋ねる質問を1つだけ選択してください。 –

+0

純粋なCとは何ですか? – CppLearner

+0

http://en.wikipedia.org/wiki/Compatibility_of_C_and_C%2B%2B –

答えて

15

クリーンCはハービソン&スティールブック(C: A Reference Manual、プレンティス・ホール)で作られた用語です。プログラムは、標準Cコンパイラと標準C++コンパイラでコンパイルできる場合は、Clean Cで記述されています。その実行は2つのコンパイラとは異なる観察可能な振る舞いをしません(最適化の問題は無関係です)。

+0

@pst "Harbison&Steeleの本で造語された用語です。 – Mysticial

+0

@pst私はH&Sのコピーでページ番号を見つけることができませんが、comp.lang.cのこの用語とH&Sを参照する人はたくさんいます – ouah

+1

セクション1.1.5を参照してください_スタンダードC++ _(5番目のp.5 C:ARMのエディション)。 – ldav1s

2

最も顕著なものとして私を襲っているのは、C++ではmallocの戻り値をキャストしなければならないということです。また、構造体は自動的にC++で型定義されます。

C++ではなくCのコンパイラを常に使用してください。 C++は、いくつかの他の違いはあってもよいC.

と完全に互換性がありません:

Cで
  • 、()ボイドFUNCを宣言する。引数が何であるかを指定していない関数を宣言しますが、C++ではvoid func()を使用します。引数を取らずにC void func(void) 'と等価です。
  • プロトタイプはC++では必須ですが、一般的にはCでの警告です。
  • 文字定数のタイプ( 'a'など)は、Cではint、C++ではcharです。
  • 文字列リテラルの型は、Cではchar []、C++ではconst char []です。
  • C言語のいくつかの正当な変数名は、classのようにC++で予約されたキーワードです。
+0

も参照http://david.tribble.com/text/ cdiffs.htm – Christoph

+0

'void func()'が引数を指定していないということは何ですか?これはどのようにして事実上使用できますか? –

+0

@VictorZamanian呼び出し規約では、Cで不正な数の引数をクラッシュせずに渡すことができます。もちろん、呼び出し元があなたの「間違った」引数で何か悪いことをした場合、それは未定義の振る舞いです。あなたは単に返品が無効であると宣言しています。 Cはそのような極度の不調を許しました。私はあなたが何かに渡す引数は、intに変換する必要があると仮定されるように宣言されていると思います。わかりません。私は本当にそのようなトリビアを気にしません。私は自分のパラメータを宣言します。 :) – doug65536

関連する問題