【问题标题】:_Pragma preprocessor operator in Visual C++_Pragma 预处理器运算符在 Visual C++ 中
【发布时间】:2011-06-14 12:00:58
【问题描述】:

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++中是否有类似的方法可用?

【问题讨论】:

  • 我建议禁用该警告。 OpenMP 编译指示被设计为在不支持它们的编译器中无害。

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


【解决方案1】:

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

我不确定omp pragma 是如何工作的,但是,这里有一个使用VC++ 的optimize pragma 的例子:

#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

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-04
  • 1970-01-01
  • 1970-01-01
  • 2023-03-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多