Static assertion (since C11)
Contenidos |
Sintaxis
_Static_assert
(
expresión
,
mensaje
)
|
(desde C11) (obsoleto en C23) | ||||||||
static_assert
(
expresión
,
mensaje
)
|
(desde C23) | ||||||||
_Static_assert
(
expresión
)
|
(desde C23) (obsoleto en C23) | ||||||||
static_assert
(
expresión
)
|
(desde C23) | ||||||||
| expresión | - | cualquier expresión constante entera |
| mensaje | - | cualquier literal de cadena |
|
Esta palabra clave también está disponible como macro de conveniencia static_assert , disponible en el encabezado <assert.h> . |
(hasta C23) |
|
Tanto
Una implementación también puede definir
|
(desde C23) |
Explicación
La expresión constante se evalúa en tiempo de compilación y se compara con cero. Si la comparación es igual a cero, ocurre un error en tiempo de compilación y el compilador debe mostrar message como parte del mensaje de error (excepto que los caracteres que no están en el basic character set no requieren ser mostrados) (until C23) debería mostrar message (si se proporciona) como parte del mensaje de error (since C23) .
De lo contrario, si expression no es igual a cero, no sucede nada; no se emite ningún código.
Palabras clave
_Static_assert , static_assert
Ejemplo
#include <assert.h> // ya no es necesario desde C23 int main(void) { // Probar si las matemáticas funcionan, C23: static_assert((2 + 2) % 3 == 1, "Whoa dude, you knew!"); // Alternativa pre-C23: _Static_assert(2 + 2 * 2 == 6, "Lucky guess!?"); // Esto producirá un error en tiempo de compilación. // static_assert(sizeof(int) < sizeof(char), "Unmet condition!"); constexpr int _42 = 2 * 3 * 2 * 3 + 2 * 3; static_assert(_42 == 42); // la cadena de mensaje puede omitirse. // const int _13 = 13; // Error en tiempo de compilación - no es una expresión constante entera: // static_assert(_13 == 13); }
Referencias
- Estándar C23 (ISO/IEC 9899:2024):
-
- 6.7.11 Static assertions (p: TBD)
- Estándar C17 (ISO/IEC 9899:2018):
-
- 6.7.10 Static assertions (p: 105)
-
- 7.2 Diagnostics <assert.h> (p: 135)
- Estándar C11 (ISO/IEC 9899:2011):
-
- 6.7.10 Static assertions (p: 145)
-
- 7.2 Diagnostics <assert.h> (p: 186-187)
Véase también
|
aborta el programa si la condición especificada por el usuario no es
true
. Puede desactivarse para builds de release
(macro de función) |
|
|
Documentación de C++
para
static_assert
declaration
|
|