Quelles sont les utilisations de #pragma
en C, avec des exemples ?
Réponses
Trop de publicités?Mon meilleur conseil est de consulter la documentation de votre compilateur, car les pragmas sont par définition spécifiques à l'implémentation. Par exemple, dans des projets embarqués, je les ai utilisés pour localiser le code et les données dans des sections différentes, ou pour déclarer des gestionnaires d'interruption, par exemple :
#pragma code BANK1
#pragma data BANK2
#pragma INT3 TimerHandler
Toutes les réponses ci-dessus sont de bonnes explications pour #pragma
mais je voulais ajouter un petit exemple
Je veux juste expliquer une simple OpenMP example
qui démontrent certaines utilisations de #pragma
à faire son travail
OpenMp
briefly
est une implémentation pour la mémoire partagée multiplateforme. programmation parallèle (on peut alors dire que c'estmachine-specific
ooperating-system-specific
)
passons à l'exemple
#include <stdio.h>
#include <omp.h>// compile with: /openmp
int main() {
#pragma omp parallel num_threads(4)
{
int i = omp_get_thread_num();
printf_s("Hello from thread %d\n", i);
}
}
le résultat est
Hello from thread 0
Hello from thread 1
Hello from thread 2
Hello from thread 3
Note that the order of output can vary on different machines.
Maintenant, laissez-moi vous dire ce que #pragma
a fait...
il demande au système d'exploitation d'exécuter un bloc de code sur 4 threads.
ce n'est qu'un des many many applications
que vous pouvez faire avec le petit #pragma
Désolé pour l'échantillon extérieur OpenMP
Il s'agit d'une directive de préprocesseur qui peut être utilisée pour activer ou désactiver certaines fonctionnalités.
Il est de deux types #pragma startup
, #pragma exit
y #pragma warn
.
#pragma startup
nous permet de spécifier les fonctions appelées au démarrage du programme.
#pragma exit
nous permet de spécifier les fonctions appelées à la sortie du programme.
#pragma warn
indique à l'ordinateur de supprimer ou non tout avertissement.
Beaucoup d'autres #pragma
Les styles peuvent être utilisés pour contrôler le compilateur.
#pragma startup
est une directive qui est utilisée pour appeler une fonction avant la fonction principale et pour appeler une autre fonction après la fonction principale, par ex.
#pragma startup func1
#pragma exit func2
Ici, func1
s'exécute avant main
y func2
fonctionne ensuite.
NOTE : Ce code ne fonctionne que dans le compilateur Turbo-C. Pour réaliser cette fonctionnalité dans GCC, vous pouvez déclarer func1
y func2
comme ça :
void __attribute__((constructor)) func1();
void __attribute__((destructor)) func2();
Pour résumer, #pragma
dit au compilateur de faire des choses. Voici quelques façons dont je l'utilise :
-
#pragma
peut être utilisé pour ignorer les avertissements du compilateur. Par exemple, pour faire taire GCC au sujet des déclarations de fonctions implicites, vous pouvez écrire :#pragma GCC diagnostic ignored "-Wimplicit-function-declaration"
Une ancienne version de
libportable
fait ceci portatif . -
#pragma once
lorsqu'il est écrit en haut d'un fichier d'en-tête, fait en sorte que ledit fichier d'en-tête soit inclus une fois.libportable
vérifie pour le support de pragma once.
- Réponses précédentes
- Plus de réponses