Namespaces
Variants

Static assertion (since C11)

From cppreference.net

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 static_assert et _Static_assert ont les mêmes effets. _Static_assert est une orthographe dépréciée qui est conservée pour la compatibilité.

Une implémentation peut également définir static_assert et/ou _Static_assert comme macros prédéfinies, et static_assert n'est plus fourni par <assert.h> .

(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