2016-11-19 9 views
1

私はJavaの背景から来ているCを学び始めています& Javascriptと私は、以下のことが技術的な理由で悪い習慣とみなされているのか、それとも言語が進化したのか疑問に思っていますか?どこCでは小文字のマクロ定義を使用しない技術的な理由はありますか?

#define bool char 
#define false 0 
#define true 1 
#define null NULL 

私は(それが正しい言葉だ場合)私は常に大文字に定義された変数を参照してください見て、この大会のために良い技術的な理由がある場合、私は思ったんだけど?これは何度も聞かれたに違いないが、答えが見つからないようだ。

+0

標準の理由がない場合、私はそれがちょうど意見に基づいているのか、それとも技術的な理由があるのか​​を尋ねています。また、私は印象の下にあったブールは、実際には標準的なC型ではなかった? – SMC

+1

@iharob boolはマクロです。 – 2501

+0

@iharobいいえ、boolは_Boolとして定義されています。 – 2501

答えて

6

マクロと呼ばれています。そして、通常、通常の識別子との衝突を避けるためにALL_UPPERCASEを使用しています。これは、テキスト置換のためのものであり、言語の通常のスコープ規則に従わないためです。

次のことを考えてみましょう:

#define foo bar 
... 
int foo, bar; // error: preprocessing turns this into int bar, bar; 

このような驚きを避けるために(それはのように思えるものではありませんコード)、我々は明確なマクロを維持しようとします。

+0

答えをありがとうございますが、C言語全体ではNULLが唯一の大文字の言語固有シーケンスですか? – SMC

+1

@ LinuxN00b通常はマクロでもあります。 –

+0

@ LinuxN00b質問が分かりません。標準ライブラリにはいくつかのマクロが用意されています。 'NULL'もその一つです。 – melpomene

1

それは小文字の定義は、言語はそのようなものとして考えているを再発明(共通規則に対してがあっても)悪いのではなく、ありません。

#define null NULL 

あなたがメンテナンスプログラマを混同しようとしている。この方法は、 whoはNULLポインタ定数を指定するための慣用方法としてNULLを期待しています。

関連する問題