views:

315

answers:

3

I'm trying to build a small code that works across multiple platforms and compilers. I use assertions, most of which can be turned off, but when compiling with PGI's pgicpp using -mp for OpenMP support, it automatically uses the --no_exceptions option: everywhere in my code with a "throw" statement generates a fatal compiler error. ("support for exception handling is disabled")

Is there a defined macro I can test to hide the throw statements on PGI? I usually work with gcc, which has GCC_VERSION and the like. I can't find any documentation describing these macros in PGI.

+2  A: 

You could try this to see what macros are predefined by the compiler:

pgcc -dM

Maybe that will reveal a suitable macro you can use.

Ville Laurikari
Indeed. The output of that is shown at http://www.pgroup.com/support/tprs_70.htm, and there's __PGI (mentioned above), and __PGIC__, __PGIC_MINOR__, and __PGIC_PATCHLEVEL__, which give the major, minor, and patchlevel parts of the compiler version number.
Brooks Moses
And there's the joy of the parser taking double underscores and doing entertaining things with them. 'PGI' is prefixed with double underscores; the other three are both prefixed and suffixed with them.
Brooks Moses
A: 

Have you looked at the boost headers? Supposing they support PGI, they will have found a way to detect it. You could use that. I would start to search somewhere in boost/config.

sbi
+3  A: 

Take a look at the Pre-defined C/C++ Compiler Macros project on Sourceforge.

PGI's compiler has a __PGI macro.

Also, take a look at libnuwen's compiler.hh header for a decent way to 'normalize' compiler versioning macros.

Michael Burr