Static assertion (since C11)
目次 |
構文
_Static_assert
(
expression
,
message
)
|
(C11以降) (C23で非推奨) | ||||||||
static_assert
(
expression
,
message
)
|
(C23以降) | ||||||||
_Static_assert
(
expression
)
|
(C23以降) (C23で非推奨) | ||||||||
static_assert
(
expression
)
|
(C23以降) | ||||||||
| expression | - | 任意の integer constant expression |
| message | - | 任意の string literal |
|
このキーワードは利便性のためのマクロ static_assert としても利用可能であり、 <assert.h> ヘッダーで提供されています。 |
(C23まで) |
|
実装は
|
(C23以降) |
説明
定数式はコンパイル時に評価され、ゼロと比較されます。ゼロと等しい場合、コンパイル時エラーが発生し、コンパイラは エラーメッセージの一部として message を表示しなければならない (ただし 基本文字集合 に含まれない文字は表示必須ではない) (C23まで) エラーメッセージの一部として message を表示することが推奨される (C23以降) 。
それ以外の場合、 expression がゼロでない場合、何も起こらず、コードは生成されません。
キーワード
_Static_assert , static_assert
例
#include <assert.h> // C23以降は不要 int main(void) { // 数学が機能するかテスト、C23: static_assert((2 + 2) % 3 == 1, "Whoa dude, you knew!"); // C23以前の代替案: _Static_assert(2 + 2 * 2 == 6, "Lucky guess!?"); // これはコンパイル時にエラーを生成します // static_assert(sizeof(int) < sizeof(char), "Unmet condition!"); constexpr int _42 = 2 * 3 * 2 * 3 + 2 * 3; static_assert(_42 == 42); // メッセージ文字列は省略可能 // const int _13 = 13; // コンパイル時エラー - 整数定数式ではありません: // static_assert(_13 == 13); }
参考文献
- C23規格 (ISO/IEC 9899:2024):
-
- 6.7.11 静的表明 (p: 未定)
- C17規格 (ISO/IEC 9899:2018):
-
- 6.7.10 静的表明 (p: 105)
-
- 7.2 診断 <assert.h> (p: 135)
- C11 standard (ISO/IEC 9899:2011):
-
- 6.7.10 Static assertions (p: 145)
-
- 7.2 Diagnostics <assert.h> (p: 186-187)
関連項目
|
ユーザー指定の条件が
true
でない場合、プログラムを異常終了させる。リリースビルドでは無効化される可能性がある
(関数マクロ) |
|
|
C++ documentation
for
static_assert
declaration
|
|