Cコンパイラーのコード生成について
関数名が空欄の関数のコンパイル (10,20); というコーディングがエラーとならない理由と、実行時の動作について
発生している問題・エラーメッセージ
コンパイラーは関数名が空白(名無し)の場合、どのようなバイナリコードになるのでしょうか?
あるプロジェクトを調査しているのですが、(a,b);の様なソースが生成され、コンパイルもエラーとならないマクロ外見つかりました
デバッグモードで、_DEBUGが定義されている時だけ、printf("%d,%d\n",a,b);が呼び出されてデバッグ出力を実行する用になっていました
リリースモードでは、_DEBUGが未定義となり("%d,%d\n",a,b);というソースコードでビルドされます
単純に (10,20); とソースコードを記述しても、コンパイルエラーにもなりません
この理由を教えてください
該当のソースコード
C言語
1#ifndef _DEBUG 2#define FUNC1(arg) {printf arg;} 3#else 4#define FUNC1 5#endif 6・ 7・ 8FUNCI(("%d,%d\n",a,b)); // デバッグモードの時だけ、printfを実行 9// Debug -> {printf("%d,%d\n",a,b);} 10// Release -> ("%d,%d\n",a,b); ... compile OK 11・ 12・
補足情報(FW/ツールのバージョンなど)
VC++6.0
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/06/12 11:40