これら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;
}
は、彼らがまったく同じていますか?
これら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;
}
は、彼らがまったく同じていますか?
はい、ただし、最初のコードは#define check
;-)でコンパイルされません。
いいえ同じものではありません。
#define check 0
int main(void) {
#if check
this is a normal line
#endif
return 0;
}
コンパイルこのセグメントは、現在0
で、前処理check
値の値に完全に依存しています。前処理if-endif
のコードをコンパイルする唯一の条件は、実行時にcheck
の0|1
の値であるため、同じになります。ただし、check
を1
に変更すると、条件付き行も同様にコンパイルされます。
コンパイル時に、最初のセグメントは#define check 0
を処理します.2番目のセグメントは明らかにコメントを無視する必要はなく、単純に無視します。
あなたは[code](https://ideone.com/Ua8B2n)を実行することができますが、それらは同じではありません。 – George
@Georgeあなたのコメントは、「彼らが同じではないことを見てください」のようです:/ – Sabrina
@Sabrinaなぜコードは有用であるのか想像できませんが、コメントコードの代わりに使われる共通のイディオム仕事やニーズの変化)は '#ifdef 0'を使うことです。とにかく最初の例では、 'check check'はfalseであるため、' #if check'はコンパイルされません。 2番目の場合と同様に、マクロチェックはありません。したがって、main(有効であると仮定して)内のものは実行されます。 – George