2017-02-08 5 views
-3

これら2つのコードの違いは何ですか:プリプロセッサディレクティブ内の行は正しいですか?

#define check 0 

int main(void) 
{ 
#if check 
this is a normal line 
#endif 
return 0; 
} 

と、この1:

int main(void) 
{ 
/* 
this is a normal line 
*/ 
return 0; 
} 

は、彼らがまったく同じていますか?

+0

あなたは[code](https://ideone.com/Ua8B2n)を実行することができますが、それらは同じではありません。 – George

+0

@Georgeあなたのコメントは、「彼らが同じではないことを見てください」のようです:/ – Sabrina

+2

@Sabrinaなぜコードは有用であるのか想像できませんが、コメントコードの代わりに使われる共通のイディオム仕事やニーズの変化)は '#ifdef 0'を使うことです。とにかく最初の例では、 'check check'はfalseであるため、' #if check'はコンパイルされません。 2番目の場合と同様に、マクロチェックはありません。したがって、main(有効であると仮定して)内のものは実行されます。 – George

答えて

-1

はい、ただし、最初のコードは#define check ;-)でコンパイルされません。

0

いいえ同じものではありません。

#define check 0 

int main(void) { 
    #if check 
    this is a normal line 
    #endif 

    return 0; 
} 

コンパイルこのセグメントは、現在0で、前処理check値の値に完全に依存しています。前処理if-endifのコードをコンパイルする唯一の条件は、実行時にcheck0|1の値であるため、同じになります。ただし、check1に変更すると、条件付き行も同様にコンパイルされます。

コンパイル時に、最初のセグメントは#define check 0を処理します.2番目のセグメントは明らかにコメントを無視する必要はなく、単純に無視します。

関連する問題