Static assertion (since C11)
Table des matières |
Syntaxe
_Static_assert
(
expression
,
message
)
|
(depuis C11) (obsolète en C23) | ||||||||
static_assert
(
expression
,
message
)
|
(depuis C23) | ||||||||
_Static_assert
(
expression
)
|
(depuis C23) (obsolète en C23) | ||||||||
static_assert
(
expression
)
|
(depuis C23) | ||||||||
| expression | - | toute expression constante entière |
| message | - | tout littéral de chaîne |
|
Ce mot-clé est également disponible sous forme de macro de commodité static_assert , disponible dans l'en-tête <assert.h> . |
(jusqu'à C23) |
|
Les deux
Une implémentation peut également définir
|
(depuis C23) |
Explication
L'expression constante est évaluée à la compilation et comparée à zéro. Si elle est égale à zéro, une erreur de compilation se produit et le compilateur doit afficher message dans le message d'erreur (sauf que les caractères n'appartenant pas au jeu de caractères de base ne sont pas requis d'être affichés) (jusqu'en C23) devrait afficher message (s'il est fourni) dans le message d'erreur (depuis C23) .
Sinon, si expression n'est pas égale à zéro, rien ne se produit ; aucun code n'est émis.
Mots-clés
_Static_assert , static_assert
Exemple
#include <assert.h> // no longer needed since C23 int main(void) { // Test si les mathématiques fonctionnent, C23 : static_assert((2 + 2) % 3 == 1, "Whoa dude, you knew!"); // Alternative pré-C23 : _Static_assert(2 + 2 * 2 == 6, "Lucky guess!?"); // Cela produira une erreur au moment de la compilation. // static_assert(sizeof(int) < sizeof(char), "Unmet condition!"); constexpr int _42 = 2 * 3 * 2 * 3 + 2 * 3; static_assert(_42 == 42); // la chaîne de message peut être omise. // const int _13 = 13; // Erreur de compilation - pas une expression constante entière : // static_assert(_13 == 13); }
Références
- Norme C23 (ISO/CEI 9899:2024) :
-
- 6.7.11 Assertions statiques (p: TBD)
- Norme C17 (ISO/CEI 9899:2018) :
-
- 6.7.10 Assertions statiques (p: 105)
-
- 7.2 Diagnostics <assert.h> (p: 135)
- Norme C11 (ISO/IEC 9899:2011):
-
- 6.7.10 Assertions statiques (p: 145)
-
- 7.2 Diagnostics <assert.h> (p: 186-187)
Voir aussi
|
interrompt le programme si la condition spécifiée par l'utilisateur n'est pas
true
. Peut être désactivé pour les versions de production
(macro fonction) |
|
|
Documentation C++
pour
static_assert
declaration
|
|