静的アサート (C11以降)
From cppreference.com
目次 |
[編集] 構文
_Static_assert ( expression , message ) |
(C11以降)(C23で非推奨) | ||||||||
static_assert ( expression , message ) |
(C23以降) | ||||||||
_Static_assert ( expression ) |
(C23以降)(C23で非推奨) | ||||||||
static_assert ( expression ) |
(C23以降) | ||||||||
| 式 | - | 任意の 整数定数式 |
| message | - | 任意の 文字列リテラル |
|
このキーワードは、ヘッダー <assert.h> で利用可能な便利なマクロ static_assert としても利用できます。 |
(C23まで) |
|
実装によっては、 |
(C23以降) |
[編集] 説明
定数式はコンパイル時に評価され、ゼロと比較されます。ゼロと比較して等しい場合、コンパイル時エラーが発生し、コンパイラは エラーメッセージの一部として message を表示しなければなりません (ただし、基本文字セットに含まれない文字は表示されない場合があります)(C23まで)(提供されている場合) エラーメッセージの一部として message を表示すべきです(C23以降)。
それ以外の場合、つまり expression がゼロと等しくない場合、何も起こらず、コードは生成されません。
[編集] キーワード
[編集] 例
このコードを実行
#include <assert.h> // no longer needed since C23 int main(void) { // Test if math works, C23: static_assert((2 + 2) % 3 == 1, "Whoa dude, you knew!"); // Pre-C23 alternative: _Static_assert(2 + 2 * 2 == 6, "Lucky guess!?"); // This will produce an error at compile time. // static_assert(sizeof(int) < sizeof(char), "Unmet condition!"); constexpr int _42 = 2 * 3 * 2 * 3 + 2 * 3; static_assert(_42 == 42); // the message string can be omitted. // const int _13 = 13; // Compile time error - not an integer constant expression: // static_assert(_13 == 13); }
[編集] 参考文献
- C23標準 (ISO/IEC 9899:2024)
- 6.7.11 静的アサート (p: TBD)
- C17標準 (ISO/IEC 9899:2018)
- 6.7.10 静的アサート (p: 105)
- 7.2 診断 <assert.h> (p: 135)
- C11標準 (ISO/IEC 9899:2011)
- 6.7.10 静的アサート (p: 145)
- 7.2 診断 <assert.h> (p: 186-187)
[編集] 関連項目
| ユーザー指定の条件が true でない場合にプログラムを異常終了させる。リリースビルドでは無効化されることがある (関数マクロ) | |
| C++ のドキュメント (
static_assert 宣言について) | |