125 votes

Utilisation de #pragma en C

Quelles sont les utilisations de #pragma en C, avec des exemples ?

6voto

Justin Love Points 3073

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

5voto

Basheer AL-MOMANI Points 5565

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'est machine-specific o operating-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

3voto

user2692601 Points 16

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.

3voto

Sparkzz Points 82

#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();

2voto

MD XF Points 7062

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.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X