2011-01-24 12 views
6

Czy jest coś takiego, jak operator ANSI C _Pragma w programie Visual C++?_Proces preprocesora prepaid w języku Visual C++

Na przykład próbuję zdefiniować następujące makro:

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

Więc mogę obejść ostrzeżenia kompilatora dla nieznanych #pragma omp ... w starszych kompilatorów GCC. Czy w VisualC++ dostępny jest podobny środek?

+0

Polecam tylko wyłączenie tego ostrzeżenia. Praktmy OpenMP są zaprojektowane tak, aby były nieszkodliwe w kompilatorze, który ich nie obsługuje. –

Odpowiedz

6

Tak, ale to dwa podkreślenia: __pragma

Nie jestem pewien, jak działa omp Pragma jednak, oto przykład przy użyciu VC++ 's optimize pragmy:

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

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

EDIT: I "Właśnie potwierdziłem, że pragmy omp mogą być również używane w następujący sposób:

#define OMP_PARALLEL_FOR __pragma(omp parallel for) 

Tak, tak, twoje makro powinno działać, jeśli zdefiniowane następująco (zauważ, że oryginalny kod niewłaściwie stosowany operator stringizing #x:

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

W rzeczywistości dokumentacja GCC podaje przykład z '# x'. – Manuel

+4

@Manuel - Myślę, że mylisz '_Pragma' z' __pragma'; są to niestety różne jednostki o różnych składach (a ta ostatnia jest specyficzna dla MSVC). Zobacz: http://stackoverflow.com/questions/3030099/c-c-pragma-in-define-macro/3030312#3030312 –