En C11 et C17, static_assert est fourni sous forme de macro par <assert.h>, comme un alias plus agréable
de _Static_assert. En C23, static_assert devient directement un mot clé du langage, et l'inclusion de
<assert.h> n'est plus nécessaire pour l'utiliser.
#include <assert.h> // nécessaire pour static_assert en C11/C17
static_assert( condition, message );
Une assertion statique est évaluée à la compilation, et non pendant l'exécution du programme. Elle est utile pour vérifier une hypothèse de portabilité : taille d'un type, alignement minimal, valeur d'une constante ou présence d'une configuration attendue.
Depuis C23, le message devient optionnel. Pour rester compatible avec C11 et C17, conservez néanmoins le message explicite.
Le bloc suivant impose qu'un entier occupe au moins quatre octets sur la plate-forme de compilation.
1 2 3 4 5 6 7 8 9 10 11 12 |
#include <assert.h> #include <limits.h> #include <stdio.h> #include <stdlib.h> static_assert( sizeof( int ) >= 4, "int must use at least 32 bits" ); int main() { printf( "CHAR_BIT == %d\n", CHAR_BIT ); return EXIT_SUCCESS; } |
assert vérifie une situation à l'exécution et peut être désactivé par NDEBUG.
static_assert vérifie une condition constante à la compilation et ne dépend pas de NDEBUG.
Améliorations / Corrections
Vous avez des améliorations (ou des corrections) à proposer pour ce document : je vous remerçie par avance de m'en faire part, cela m'aide à améliorer le site.
Emplacement :
Description des améliorations :