C 11キーワード_Static_assert

1380 ワード

C 11新規キーワード_Static_assert
 C 11標準にキーワードが追加されました.Static_assert、その使い方と注意点を紹介します.
使用法
 はC 11以前の断言assert()式と少し似ている.assert()式は、実行時にチェックされます.C 11に追加された_Static_assert宣言は、コンパイル時にassert()式を確認できます.したがって、assert()は、実行中の関数を中止する可能性があります.Static_assert()は、プログラムがコンパイルできない場合に使用できます._Static_assert()は2つのパラメータを受け入れます.1番目のパラメータは整数定数式で、2番目のパラメータは文字列です.最初の式の評価値が0(または_False)の場合、コンパイルには文字列が表示され、プログラムはコンパイルされません.
ルーチン
次は使用_Static_assertのインスタンス:
#include 
#include 

_Static_assert(CHAR_BIT == 16, "16-bit char falsely assumed");
int main(void)
{
    puts("char is 16 bits.");
    return 0;
}


 コンパイル結果
statasrt.c:4:1:Error:static assertion failed: "16-bit char falsely assumed"
_Static_assert(CHAR_BIT == 16, "16-bit char falsely assumed");
^              ~~~~~~~~~~~~~~~~~~~~~~~
1 error generated.


注意事項
  • 性能面:assert()は実行期間の断言であり、実行期間のエラーを発見するために使用され、コンパイル期間に繰り上げてエラーを発見することができず、強制性もなく、コンパイル情報の可読性を改善することもできない.ランタイムチェックである以上、パフォーマンスに影響があるに違いないので、リリースバージョンではassertがオフになることがよくあります.static_assertはコンパイル中に断言し、ターゲットコードを生成しないためstatic_assertは、ランタイムパフォーマンスの損失をもたらすことはありません.
  • 使用範囲:static_assertはグローバル役割ドメイン、ネーミングスペース、クラス役割ドメイン、関数役割ドメインで使用でき、ほとんど制限されずに使用できます.
  • 定数式:static_assertの断言式の結果は、コンパイル時に計算できる式、すなわち定数式でなければならない.変数を使用するとエラーが発生します.