do {} while(0) |
辞書:電算用語の基礎知識 プログラミング用語編 (PTPROGY) |
読み:ドゥー-なみかっこ-なみかっことじ-ホワイル-かっこ-ゼロ-かっことじ |
外語:do {} while(0) |
品詞:名詞 |
C/C++で、関数を無効化する際に使われる、マクロ定義の方法の一つ。
|
概要 |
次のようなexternがあったとする(引数の型は何でも良い)。
extern void hogehoge(int, int);
これを、#if〜#else〜#endifなどの条件に応じて関数を無効にしたい場合があったとすると、条件に応じて次のようにマクロを定義する。
#define hogehoge(x, y) do {} while(0)
特徴 |
考え方 |
単に無効化するだけなら、次の方法で可能である。
#define hogehoge(x, y)
しかしこの方法は、ブロック{}で囲まれていないif文などで使用された場合、正常にコンパイルできない。
if (cond) hogehoge(x,y); else fugafuga(x,y);
hogehoge(x,y);がそのまま;に置き換わってしまうと、else以降がエラーになる。そこで、動作しないコードを定義するようになった。
最適化 |
前述した以下の定義は、動作しないコードを定義する方法の一つである。
#define hogehoge(x, y) do {} while(0)
こうすると、ブロック{}で囲まれていないif文などで使用されても誤動作せず、関数の呼び出しを無効化できる。(0)の代わりに(false)などでも同様である。
また、この処理は常に1回しか実行されずしかも内容がない。従って賢いC/C++コンパイラーでは最適化によって丸ごと消滅するため、出力バイナリサイズも無駄に増えることがない。
他の方法 |
次のような方法でも同様に動作する。
#define hogehoge(x, y) ((void)0)
リンク |
通信用語の基礎知識検索システム WDIC Explorer Ver 7.04a (27-May-2022) Search System : Copyright © Mirai corporation Dictionary : Copyright © WDIC Creators club |