Static assertion (since C11)
Содержание |
Синтаксис
_Static_assert
(
выражение
,
сообщение
)
|
(с C11) (устарело в C23) | ||||||||
static_assert
(
выражение
,
сообщение
)
|
(с C23) | ||||||||
_Static_assert
(
выражение
)
|
(с C23) (устарело в C23) | ||||||||
static_assert
(
выражение
)
|
(с C23) | ||||||||
| expression | - | любой integer constant expression |
| message | - | любой string literal |
|
Этот ключевое слово также доступно как удобный макрос static_assert , доступный в заголовочном файле <assert.h> . |
(до C23) |
|
Оба варианта
Реализация может также определять
|
(начиная с C23) |
Объяснение
Константное выражение вычисляется во время компиляции и сравнивается с нулём. Если оно равно нулю, возникает ошибка компиляции, и компилятор должен отобразить message как часть сообщения об ошибке (за исключением того, что символы не из basic character set не обязаны отображаться) (until C23) должен отобразить message (если предоставлен) как часть сообщения об ошибке (since C23) .
В противном случае, если expression не равно нулю, ничего не происходит; никакой код не генерируется.
Ключевые слова
_Static_assert , static_assert
Пример
#include <assert.h> // больше не требуется начиная с C23 int main(void) { // Проверка работы математики, C23: static_assert((2 + 2) % 3 == 1, "Ух ты, ты знал!"); // Альтернатива до C23: _Static_assert(2 + 2 * 2 == 6, "Угадал!?"); // Это вызовет ошибку на этапе компиляции. // static_assert(sizeof(int) < sizeof(char), "Невыполненное условие!"); 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 Статические утверждения (стр.: TBD)
- Стандарт C17 (ISO/IEC 9899:2018):
-
- 6.7.10 Статические утверждения (стр: 105)
-
- 7.2 Диагностика <assert.h> (стр: 135)
- Стандарт C11 (ISO/IEC 9899:2011):
-
- 6.7.10 Статические утверждения (стр: 145)
-
- 7.2 Диагностика <assert.h> (стр: 186-187)
Смотрите также
|
прерывает выполнение программы, если заданное пользователем условие не является
true
. Может быть отключено для релизных сборок
(макрос функции) |
|
|
C++ documentation
для
static_assert
declaration
|
|