Статическое утверждение (с C11)
Синтаксис
_Static_assert ( выражение , сообщение ) | (с C11)(устаревшее в C23) | |
static_assert ( выражение , сообщение ) | (с C23) | |
_Static_assert ( выражение ) | (с C23)(устаревшее в C23) | |
static_assert ( выражение ) | (с C23) |
| выражение | - | любое целочисленное константное выражение |
| сообщение | - | любое строковое литерал |
| Этот ключевое слово также доступно в виде удобного макроса | (до C23) |
| Оба Реализация также может определить | (с C23) |
Объяснение
Константное выражение вычисляется во время компиляции и сравнивается с нулём. Если результат сравнения равен нулю, возникает ошибка во время компиляции, и компилятор должен отобразить сообщение в качестве части сообщения об ошибке (за исключением того, что символы, не входящие в базовый набор символов, не обязаны отображаться)(до C23)должен отобразить сообщение (если оно указано) в качестве части сообщения об ошибке(с C23).
В противном случае, если выражение не равно нулю, ничего не происходит; код не генерируется.
Ключевые слова
Пример
#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:2023):
- 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++ для static_assert объявления |
|
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/c/language/_Static_assert