Partager via


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)