| ア | イ | ウ | エ | オ | 
| カ | キ | ク | ケ | コ | 
| サ | シ | ス | セ | ソ | 
| タ | チ | ツ | テ | ト | 
| ナ | ニ | ヌ | ネ | ノ | 
| ハ | ヒ | フ | ヘ | ホ | 
| マ | ミ | ム | メ | モ | 
| ヤ | ユ | ヨ | ||
| ラ | リ | ル | レ | ロ | 
| ワ | ヰ | ヴ | ヱ | ヲ | 
| ン | 
| A | B | C | D | E | 
| F | G | H | I | J | 
| K | L | M | N | O | 
| P | Q | R | S | T | 
| U | V | W | X | Y | 
| Z | 数字 | 記号 | ||
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)
コメントなどを投稿するフォームは、日本語対応時のみ表示されます