NDEBUGが定義されている場合、内部的に として定義されているglibcの debug printfs を見てきました。同様に、for Visual C++ コンパイラもあります。前者は GCC と VC++ コンパイラの両方で動作しますが、後者は VC++ でのみ動作します。これで、上記の両方のステートメントが操作なしとして扱われ、それぞれのコードが生成されないことがわかりました。しかし、ここで疑問があります。(void) 0
__noop
の場合__noop
、MSDN は、コンパイラによって提供される組み込み関数であると述べています。〜に来て(void) 0
、コンパイラによって何も操作されないと解釈されるのはなぜですか? それはC言語のトリッキーな使用法ですか、それとも標準はそれについて明示的に述べていますか? それとも、それはコンパイラの実装と関係がありますか?