C/C++のマクロにおける利用
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2021/11/10 17:56 UTC 版)
「do-while文」の記事における「C/C++のマクロにおける利用」の解説
C/C++におけるdo-while文の特殊な用法に、最後にセミコロンが付く構文であることを利用し、展開結果にブロックを含むマクロの呼び出しを関数のように見えるものにする、というイディオムがある。 /* 2つの値 x, y を入れ替えるマクロ。 */#define SWAP(x, y, tmp) do { (tmp) = (x); (x) = (y); (y) = (tmp); } while (0)/* 以下のように書いてしまうと、セミコロンを付けた場合にコンパイルが通らなくなるケースがある。 *//*#define SWAP(x, y, tmp) { (tmp) = (x); (x) = (y); (y) = (tmp); }*/void some_function(){ int x, y, tmp;... if (x > y) SWAP(x, y, tmp); else puts("Not swapped.");...} これを利用することで、「セミコロンを付けてはいけないマクロ」という、扱いが面倒なものを作らずにすむ。
※この「C/C++のマクロにおける利用」の解説は、「do-while文」の解説の一部です。
「C/C++のマクロにおける利用」を含む「do-while文」の記事については、「do-while文」の概要を参照ください。
- C/C のマクロにおける利用のページへのリンク