静的表明
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2021/05/21 09:00 UTC 版)
「表明 (プログラミング)」の記事における「静的表明」の解説
コンパイル時にチェックされる表明は静的表明と呼ばれる。静的表明はコンパイル時のテンプレートメタプログラミングに特に有効だが、C言語でも表明違反となったときのみ不正なコード(コンパイルエラーとなるコード)が導入されるようにして静的表明を実装可能である。例えば、C言語では次のように静的表明を実装できる。 #define COMPILE_TIME_ASSERT(pred) switch(0){case 0:case pred:;}COMPILE_TIME_ASSERT( BOOLEAN CONDITION ); (BOOLEAN CONDITION) が偽と評価されると、switch文の2つ目のラベルの値はゼロとなるため、コンパイラは2つのcaseラベルが同じ値だとしてエラーを検出する。なお、指定する式はコンパイル時に値が定まるものでなければならない。例えば (sizeof(int)==4) といった式である。また、関数定義内でないとswitch文が出現しただけでコンパイルエラーになるので、関数内でしか使えない。 もう1つのC言語でよく知られている静的表明の実装として、次の方式がある。 static char const static_assertion[ (BOOLEAN CONDITION) ? 1 : -1 ] = {'!'}; (BOOLEAN CONDITION) が偽と評価されると、配列の長さが負になるため、このコードはコンパイルされなくなる。たとえコンパイラが負のサイズの配列を許したとしても、初期値('!' の部分)を設定しようとした時点で問題に気付くだろう。 これを何度も使用するには、配列名がそれぞれ別々でなければならない。最近[いつ?]のコンパイラにはプリプロセッサに __COUNTER__ というマクロ定義があり、出現の度に増加する数を返すので、それを名前に含めればよい。 D言語は静的表明 static assert をサポートしている。また、C++ではC++11において static_assert が導入された。C言語でもC11規格で _Static_assert が導入された。
※この「静的表明」の解説は、「表明 (プログラミング)」の解説の一部です。
「静的表明」を含む「表明 (プログラミング)」の記事については、「表明 (プログラミング)」の概要を参照ください。
- 静的表明のページへのリンク