2009-08-05 8 views
8

Je suis en train de créer un petit code qui fonctionne sur plusieurs plates-formes et compilateurs. J'utilise des assertions, dont la plupart peuvent être désactivées, mais lors de la compilation avec pgicpp de PGI en utilisant -mp pour le support OpenMP, il utilise automatiquement l'option --no_exceptions: partout dans mon code avec une instruction "throw" génère une erreur de compilation fatale. ("la gestion des exceptions est désactivée")Détecter le compilateur aveC#ifdef

Existe-t-il une macro define d que je peux tester pour masquer les instructions throw sur PGI? Je travaille habituellement avec gcc, qui a GCC_VERSION et similaires. Je ne trouve aucune documentation décrivant ces macros dans PGI.

+0

clang http://stackoverflow.com/questions/2658461/what-predefined-macro-can-i-use-to-detect-clang | VC http://stackoverflow.com/questions/15127522/how-to-ifdef-by-compilertype-gcc-or-vc –

Répondre

12

Jetez un oeil au projet Pre-defined C/C++ Compiler Macros sur Sourceforge.

Le compilateur PGI a une macro __PGI.

En outre, jetez un oeil à libnuwen's compiler.hh en-tête pour une manière décente de «normaliser» les macros de versionnement du compilateur.

+0

Le deuxième lien est mort :( –

4

Vous pouvez essayer de voir ce que les macros sont prédéfinies par le compilateur:

pgcc -dM 

Peut-être que révélera une macro approprié, vous pouvez utiliser.

+1

En effet. La sortie de cela est montrée à http://www.pgroup.com/support/tprs_70.htm, et il y a __PGI (mentionné ci-dessus), et __PGIC__, __PGIC_MINOR__, et __PGIC_PATCHLEVEL__, qui donnent les parties majeure, mineure, et de niveau de patch de le numéro de version du compilateur. –

+0

Et il y a la joie de l'analyste de prendre des doubles soulignements et de faire des choses amusantes avec eux. «PGI» est préfixé de doubles traits de soulignement; les trois autres sont préfixés et suffixés avec eux. –

0

Avez-vous regardé les en-têtes boost? Supposons qu'ils soutiennent PGI, ils auront trouvé un moyen de le détecter. Tu pourrais utiliser ça. Je voudrais commencer à chercher quelque part dans boost/config.