Visual C ++中的_Pragma预处理程序运算符

时间:2011-01-24 12:39:23

标签: visual-c++ portability pragma c-preprocessor

在Visual C ++中是否有类似ANSI C运算符_Pragma的东西?

例如,我正在尝试定义以下宏:

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

因此,我可以绕过旧GCC编译器中未知#pragma omp ...的编译器警告。 VisualC ++中是否有类似的方法?

1 个答案:

答案 0 :(得分:7)

是的,但它有两个下划线:__pragma

我不确定omp pragma是如何工作的,但是,这是使用VC ++的optimize编译指示的示例:

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

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

编辑:我刚刚确认omp pragma也可以像这样使用:

#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