#pragma lexems
La commande #pragma
permet au programmeur d'indiquer au compilateur d'exécuter
certaines actions. La commande #pragma
dépend de l'implémentation qui en est
faite sur chaque compilateur, son utilisation diffère d'un compilateur à l'autre.
une possibilité de cette commande peut être de tracer l'exécution du programme.
#pragma
peut aussi être utilisé pour appeler une fonction avant l'exécution du
main
ou à sa sortie.
#pragma startup foo() // La fonction ne doit pas avoir de type de retour ni de paramètres #pragma exit bar()
Ci-dessous, une liste des familles de compilateurs et des OS sur lesquels ceux-ci
sont disponibles, présente les spécificités propres à l'implémentation de #pragma
sur ces compilateurs.
#pragma redefine_extname printf prnt
Fournit au fonctions C un alias définit par le programmeur lorsque que le compilateur traduit le code en assembleur.
#pragma extern_prefix ext_ // démarrage du pré-fixage // insérez ici vos préfixes #pragma extern_prefix // fin du préfixage
Préfixe toutes les noms des fonctions assembleur avec une chaîne de caractères. Une
autre utilisation de #pragma extern_prefix
stoppera le pré-fixage de des fonctions.
#pragma pack(64) // optimise toutes les classes, unions et structures à la suite de cette ligne pour du code 64 bits
Cette méthode d'optimisation “aligne” les membres des structures, classes et unions à un facteur de la taille du “paquet” de données. Cela simplifie (et donc accélère) l'accès données par le processeur puisque les données sont “alignée” sur le début des structures de données que le processeur utilise. Cependant, ce procédé a un coût mémoire plus élevé que la normale qui est causé par l'ajout de données aléatoires et inutiles pour permettre l'alignement des “paquets” de données.
La valeur numérique entre parenthèses doit être une puissance de 2 (2, 4, 8, 16, 32, 64…).
Il y a d'autres utilisations possibles d'utilise la commande #pragma pack
qui sont décrits
ci-dessous (bien que la méthode précédente soit la plus commune et la plus facile) :
#pragma pack() /* avec des parenthèses vides */
Ceci réinitialisera la valeur de “packing”.
Article issu de la traduction de l'article anglais qui n'est pas terminé