Participer au site avec un Tip
Rechercher
 

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 :

Instruction static_assert

La macro assert


Entête à  inclure

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.

Syntaxe d'utilisation du static_assert

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.

Paramètres

Exemple de code

#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.



La macro assert