Namespaces
Variants

Static assertion (since C11)

From cppreference.net

Inhaltsverzeichnis

Syntax

_Static_assert ( Ausdruck , Nachricht ) (seit C11) (veraltet in C23)
static_assert ( Ausdruck , Nachricht ) (seit C23)
_Static_assert ( Ausdruck ) (seit C23) (veraltet in C23)
static_assert ( Ausdruck ) (seit C23)
expression - jede ganzzahlige konstante Ausdruck
message - jeder Zeichenkettenliteral

Dieses Schlüsselwort ist auch als praktisches Makro static_assert verfügbar, erreichbar im Header <assert.h> .

(bis C23)

Sowohl static_assert als auch _Static_assert haben dieselben Effekte. _Static_assert ist eine veraltete Schreibweise, die aus Kompatibilitätsgründen beibehalten wird.

Eine Implementierung kann außerdem static_assert und/oder _Static_assert als vordefinierte Makros definieren, und static_assert wird nicht mehr durch <assert.h> bereitgestellt.

(seit C23)

Erklärung

Der konstante Ausdruck wird zur Kompilierzeit ausgewertet und mit Null verglichen. Wenn er gleich Null ist, tritt ein Kompilierzeitfehler auf und der Compiler muss message als Teil der Fehlermeldung anzeigen (außer dass Zeichen nicht im basic character set nicht angezeigt werden müssen) (until C23) sollte message (falls angegeben) als Teil der Fehlermeldung anzeigen (since C23) .

Andernfalls, wenn expression ungleich null ist, geschieht nichts; es wird kein Code erzeugt.

Schlüsselwörter

_Static_assert , static_assert

Beispiel

#include <assert.h> // no longer needed since C23
int main(void)
{
    // Testen ob Mathematik funktioniert, C23:
    static_assert((2 + 2) % 3 == 1, "Whoa dude, you knew!");
    // Pre-C23 Alternative:
    _Static_assert(2 + 2 * 2 == 6, "Lucky guess!?");
    // Dies wird einen Fehler zur Kompilierzeit erzeugen.
    // static_assert(sizeof(int) < sizeof(char), "Unmet condition!");
    constexpr int _42 = 2 * 3 * 2 * 3 + 2 * 3;
    static_assert(_42 == 42); // die Nachricht kann weggelassen werden.
    // const int _13 = 13;
    // Kompilierzeitfehler - kein Integer-Konstantenausdruck:
    // static_assert(_13 == 13);
}

Referenzen

  • C23-Standard (ISO/IEC 9899:2024):
  • 6.7.11 Statische Assertionen (S: TBD)
  • C17-Standard (ISO/IEC 9899:2018):
  • 6.7.10 Static assertions (p: 105)
  • 7.2 Diagnostics <assert.h> (p: 135)
  • C11-Standard (ISO/IEC 9899:2011):
  • 6.7.10 Static assertions (p: 145)
  • 7.2 Diagnostics <assert.h> (p: 186-187)

Siehe auch

bricht das Programm ab, falls die benutzerdefinierte Bedingung nicht true ist. Kann für Release-Builds deaktiviert werden
(Funktionsmakro)
C++-Dokumentation für static_assert Deklaration