Aucune entête n'est nécessaire étant donné que contrairement à assert
, static_assert
n'est pas une macro :
c'est un mot clé réservé du langage C. J'ai choisis de placer la documentation de static_assert
ici, par similitude avec
la macro assert
mais ce sont bien deux mécanismes fondamentalement différents.
static_assert( condition, errorMessage );
Une assertion statique est évaluée non pas durant exécution (comme pour la macro assert
), mais à la compilation.
Cela permet de vérifier que certains prérequis sont bien présents afin de poursuivre la compilation.
#include <assert.h> #include <stdio.h> #include <stdlib.h> static_assert( sizeof(int) == 2, "16 bits platform required" ); int main() { printf( "We are on a 16 bits platform\n" ); return EXIT_SUCCESS; }
Voici ce que produira la tentative de compilation si vous n'êtes pas sur une plate-forme 16 bits.
$> gcc -o Sample Sample.c -std=c11 Sample.c:5:16: error: expected declaration specifiers or '...' before 'sizeof' static_assert( sizeof(int) == 2, "16 bits platform required" ); ^ Sample.c:5:34: error: expected declaration specifiers or '...' before string constant static_assert( sizeof(int) == 2, "16 bits platform required" ); ^ $>
Ensuite, trichez et mettez la taille d'un entier, associée à votre plate-forme, à la place de la valeur 2.
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 :