マクロ定義(C言語)
#砂肝コラム
#C言語
デバッグ用
デバッグのためのマクロ定義の使い方の例。
案外、こういうのは技術書に書いていないsngm45.icon
#if 0~#else で囲まれたコードは無効化され、#else~#endifが有効化される。
逆にしたいなら、#if 1とする。
あくまで開発時のデバッグ用。消し忘れに注意(#if 1にするのではなく、消す)。
code:Macro for debugging
#if 0
func1();
#else
func2();
#endif
#if 0のかわりに、#ifdef NANIKA_MACROといった書き方もできる。
NANIKA_MACROが(include先を含めて)どこかに定義されていれば、通る。
機能切り替え
コンパイルオプションで使われる方法
OSやプラットフォームなどのオプション次第で、同一ソースコードの動作を変えることができる。
例↓
ここでは、IGNORE_ERRORは「エラーを無視する」マクロ。
IGNORE_ERRORが定義されている場合、エラーチェックを行わない。
IGNORE_ERRORが定義されていない場合、エラーチェックを行う。
code:macro for switch option
uint8 val;
val = func1();
#ifndef IGNORE_ERROR
if (ret < 0)
{
/* エラー処理 */
}
else
{
#endif
func2(val);
#ifndef IGNORE_ERROR
}
#endif
定義済マクロ
定義済みマクロ - microsoft Docs
定義済みマクロ - ARM コンパイラツールチェーン コンパイラリファレンス
gcc のプリプロセッサの定義済みマクロ(Predefined Macros)の確認方法 - Qiita
更新された定義済みマクロ - C++11
References
#if, #elif, #else, and #endif Directives (C/C++) - microsoft Docs