2011-01-24 20 views
6

¿Hay algo así como el operador ANSI C _Pragma en Visual C++?_Pragma operador de preprocesador en Visual C++

Por ejemplo, estoy tratando de definir la macro siguiente:

#ifdef _OPENMP 
#define PRAGMA_IF_OPENMP(x) _Pragma (#x) 
#else // #ifdef _OPENMP 
#define PRAGMA_IF_OPENMP(x) 
#endif // #ifdef _OPENMP 

, así que puede eludir las advertencias del compilador para desconocida #pragma omp ... en más viejos compiladores GCC. ¿Hay algún medio similar disponible en VisualC++?

+0

te recomiendo que la desactivación de advertencia. Los pragmas OpenMP están diseñados para ser inofensivos en el compilador que no los admite. –

Respuesta

6

Sí, pero es dos subrayados: __pragma

No estoy seguro acerca de cómo funciona el omp pragma, sin embargo, aquí hay un ejemplo usando VC++ 's optimize pragma:

#define PRAGMA_OPTIMIZE_OFF __pragma(optimize("", off)) 

// These two lines are equivalent 
#pragma optimize("", off) 
PRAGMA_OPTIMIZE_OFF 

EDIT: I Acabo de confirmar que los pragmas omp también se pueden usar así:

#define OMP_PARALLEL_FOR __pragma(omp parallel for) 

Así que, sí, la macro debe funcionar si se define de la siguiente manera (en cuenta que el código original usado incorrectamente el operador stringizing #x:

#ifdef _OPENMP 
#define PRAGMA_IF_OPENMP(x) __pragma (x) 
#else // #ifdef _OPENMP 
#define PRAGMA_IF_OPENMP(x) 
#endif // #ifdef _OPENMP 
+0

En realidad, la documentación de GCC da un ejemplo con '# x'. – Manuel

+4

@Manuel - Creo que estás confundiendo '_Pragma' con' __pragma'; lamentablemente son entidades diferentes con sintaxis diferentes (y la última es específica de MSVC). Ver: http://stackoverflow.com/questions/3030099/c-c-pgragma-in-define-macro/3030312#3030312 –