通信用語の基礎知識 日本文化チャンネル桜二千人委員会 戻る

通常PC用 / 人気 更新 今日 カテ
電子計算機 > 仕様・構造 > ソフトウェア > プログラミング言語 > 言語仕様
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)

リンク
用語の所属
C/C++
関連する用語
assert

[再検索] [戻る]


通信用語の基礎知識検索システム WDIC Explorer Ver 7.03 (16-May-2019)
Search System : Copyright © Mirai corporation
Dictionary : Copyright © WDIC Creators club
KisoDic