_Static_assert
キーワードと static_assert
マクロ (C11)
コンパイル時にアサーションをテストします。 指定された定数式が false
の場合、コンパイラには、指定されたメッセージが表示され、コンパイルはエラー C2338 で失敗します。それ以外の場合、影響はありません。 C11 での新機能です。
_Static_assert
は、C11 で導入されたキーワードです。 static_assert
は、C11 で導入されたマクロであり、 _Static_assert
キーワードにマップされます。
構文
_Static_assert(constant-expression, string-literal);
static_assert(constant-expression, string-literal);
パラメーター
constant-expression
コンパイル時に評価できる整数定数式。 式がゼロ (false) の場合、 string-literal
パラメーターが表示され、コンパイルはエラーで失敗します。 条件がゼロ以外 (true) の場合、影響はありません。
string-literal
constant-expression
が 0 (false) と評価された場合に表示されるメッセージ。 このメッセージは、コンパイラの基本文字セットを使用して作成される必要があります。 文字をマルチバイト文字またはワイド文字にすることはできません。
解説
コンパイル時は、ソフトウェアのアサーションが _Static_assert
キーワードと static_assert
マクロの両方によってテストされます。 これらは、グローバル スコープまたは関数スコープで使用できます。
これに対し、実行時は、assert
マクロ、および _assert
と _wassert
関数によってソフトウェアのアサーションがテストされ、ランタイム コストが発生します。
Microsoft 固有の動作
C では、<assert.h>
を含まない場合、 static_assert
は、Microsoft コンパイラによって、 _Static_assert
にマップするキーワードとして扱われます。 同じコードが C と C++ の両方で動作するため、 static_assert
を使用することをお勧めします。
コンパイル時アサートの例
次の例では、 static_assert
と _Static_assert
を使用して、列挙に含まれる要素の数と、整数が 32 ビット幅であることを確認しています。
// requires /std:c11 or higher
#include <assert.h>
enum Items
{
A,
B,
C,
LENGTH
};
int main()
{
// _Static_assert is a C11 keyword
_Static_assert(LENGTH == 3, "Expected Items enum to have three elements");
// Preferred: static_assert maps to _Static_assert and is compatible with C++
static_assert(sizeof(int) == 4, "Expecting 32 bit integers");
return 0;
}
必要条件
マクロ | 必須ヘッダー |
---|---|
static_assert |
<assert.h> |
/std:c11
を使ってコンパイルします。
Windows SDK バージョン 10.0.20348.0 (バージョン 2104) 以降。 C11 および C17 開発用の Windows SDK のインストールについては、「Visual Studio に C11 および C17 サポートをインストールする」を参照してください。
関連項目
_STATIC_ASSERT
マクロ
assert
マクロと _assert
および _wassert
関数/std
(言語標準バージョンの指定)