Оператор препроцессора _Pragma в Visual C ++ - PullRequest
6 голосов
/ 24 января 2011

Есть ли что-то вроде оператора ANSI C _Pragma в Visual C ++?

Например, я пытаюсь определить следующий макрос:

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

Таким образом, я могу обойти предупреждения компилятора для неизвестного #pragma omp ... в старых компиляторах GCC. Есть ли аналогичные средства в VisualC ++?

1 Ответ

7 голосов
/ 24 января 2011

Да, но это два подчеркивания: __pragma

Я не уверен в том, как работает прагма omp, однако, вот пример использования прагмы optimize VC ++:

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

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

РЕДАКТИРОВАТЬ: Я только что подтвердил, что прагмы omp также можно использовать следующим образом:

#define OMP_PARALLEL_FOR __pragma(omp parallel for)

Итак, ваш макрос должен работать, если он определен какследует (обратите внимание, что в исходном коде неправильно использовался строковый оператор #x:

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