Namensräume
Varianten
Aktionen

Static assertion (seit C11)

Von cppreference.com
< c‎ | Sprache

Inhalt

[bearbeiten] Syntax

_Static_assert ( expression , message ) (seit C11)(veraltet in C23)
static_assert ( expression , message ) (seit C23)
_Static_assert ( expression ) (seit C23)(in C23 veraltet)
static_assert ( expression ) (seit C23)
expression - beliebiger ganzzahliger konstanten Ausdruck
message - beliebiger String-Literal

Dieses Schlüsselwort ist auch als praktische Makro-Definition static_assert verfügbar, im Header <assert.h>.

(bis C23)

Sowohl static_assert als auch _Static_assert haben dieselben Auswirkungen. _Static_assert ist eine veraltete Schreibweise, die zur Kompatibilität beibehalten wird.

Eine Implementierung kann static_assert und/oder _Static_assert auch als vordefinierte Makros definieren, und static_assert wird nicht mehr von <assert.h> bereitgestellt.

(seit C23)

[bearbeiten] Erklärung

Der konstante Ausdruck wird zur Kompilierzeit ausgewertet und mit Null verglichen. Wenn er gleich Null ist, tritt ein Kompilierungsfehler auf und der Compiler muss die message als Teil der Fehlermeldung anzeigen (außer dass Zeichen, die nicht zum Basiszeichensatz gehören, nicht zwingend angezeigt werden müssen(bis C23)sollte die message (falls vorhanden) als Teil der Fehlermeldung anzeigen(seit C23).

Andernfalls, wenn expression nicht Null ist, passiert nichts; es wird kein Code generiert.

[bearbeiten] Schlüsselwörter

_Static_assert, static_assert

[bearbeiten] Beispiel

#include <assert.h> // no longer needed since C23
 
int main(void)
{
    // Test if math works, C23:
    static_assert((2 + 2) % 3 == 1, "Whoa dude, you knew!");
    // Pre-C23 alternative:
    _Static_assert(2 + 2 * 2 == 6, "Lucky guess!?");
 
    // This will produce an error at compile time.
    // static_assert(sizeof(int) < sizeof(char), "Unmet condition!");
 
    constexpr int _42 = 2 * 3 * 2 * 3 + 2 * 3;
    static_assert(_42 == 42); // the message string can be omitted.
 
    // const int _13 = 13;
    // Compile time error - not an integer constant expression:
    // static_assert(_13 == 13);
}

[bearbeiten] Referenzen

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

[bearbeiten] Siehe auch

bricht das Programm ab, wenn die vom Benutzer spezifizierte Bedingung nicht wahr ist. Kann für Release-Builds deaktiviert werden
(Funktionsmakro) [bearbeiten]
C++ Dokumentation für static_assert Deklaration