Mot clé _Static_assert
et macro static_assert
(C11)
Teste une assertion au moment de la compilation. Si l’expression constante spécifiée présente la valeur false
, le compilateur affiche le message spécifié et la compilation échoue avec l’erreur C2338. Sinon, elle est sans effet. Nouveautés dans C11.
_Static_assert
est un mot clé introduit dans C11. static_assert
est une macro, introduite en C11, qui correspond au mot clé _Static_assert
.
Syntaxe
_Static_assert(constant-expression, string-literal);
static_assert(constant-expression, string-literal);
Paramètres
constant-expression
Expression constante intégrale qui peut être évaluée au moment de la compilation. Si l’expression est zéro (false), affiche le paramètre string-literal
et la compilation échoue avec une erreur. Si l’expression est différente de zéro (true), il n’y a aucun effet.
string-literal
Message affiché si constant-expression
prend la valeur zéro (false). Le message doit être composé à l’aide du jeu de caractères de base du compilateur. Les caractères ne peuvent pas être multioctets ou larges.
Notes
Le mot clé _Static_assert
et la macro static_assert
testent une assertion logicielle au moment de la compilation. Ils peuvent être utilisés dans la portée globale ou de la fonction.
En revanche, la macro assert
et les fonctions _assert
et _wassert
testent une assertion logicielle au moment de l’exécution et entraînent un coût d’exécution.
Comportement spécifique à Microsoft
En C, quand vous n’incluez pas <assert.h>
, le compilateur Microsoft traite static_assert
comme un mot clé correspondant à _Static_assert
. L’utilisation de static_assert
est préférable, car le même code fonctionne à la fois en C et en C++.
Exemple d’assertion au moment de la compilation
Dans l’exemple suivant, static_assert
et _Static_assert
sont utilisés pour vérifier le nombre d’éléments dans une énumération, et que les entiers ont 32 bits de large.
// requires /std:c11 or higher
#include <assert.h>
enum Items
{
A,
B,
C,
LENGTH
};
int main()
{
// _Static_assert is a C11 keyword
_Static_assert(LENGTH == 3, "Expected Items enum to have three elements");
// Preferred: static_assert maps to _Static_assert and is compatible with C++
static_assert(sizeof(int) == 4, "Expecting 32 bit integers");
return 0;
}
Spécifications
Macro | En-tête requis |
---|---|
static_assert |
<assert.h> |
Compilez avec /std:c11
.
SDK Windows 10.0.20348.0 (version 2104) ou ultérieure. Pour plus d’informations sur l’installation du SDK Windows pour le développement en C11 et C17, consultez Installer la prise en charge de C11 et C17 dans Visual Studio.
Voir aussi
_STATIC_ASSERT
Macro
Macro assert
et fonctions _assert
et _wassert
/std
(Spécifier la version de norme de langage)