如果我想定义编译指示的第一个标识符,我该怎么做?
例如,我需要这样的东西来作为 openmp pragma 工作:
#define FOO omp
#pragma FOO parallel
所以我需要将其解释为:
#pragma omp parallel
我在 Linux 中使用 GCC。从我目前阅读的内容来看,这似乎不受支持。有什么解决方法吗?
如果我想定义编译指示的第一个标识符,我该怎么做?
例如,我需要这样的东西来作为 openmp pragma 工作:
#define FOO omp
#pragma FOO parallel
所以我需要将其解释为:
#pragma omp parallel
我在 Linux 中使用 GCC。从我目前阅读的内容来看,这似乎不受支持。有什么解决方法吗?
从 C99 开始,我们有了_Pragma
操作符,它基本上允许您将内容放置在#pragma
任何地方,不仅在一行上,而且还可以对其进行宏扩展。就像是
#define STRINGIFY_(...) #__VA_ARGS__
#define STRINGIFY(...) STRINGIFY_(__VA_ARGS__)
#define FOO omp
#define PARALLEL(...) _Pragma(STRINGIFY(FOO parallel __VA_ARGS__))
接着
PARALLEL(private(a))
for(size_t i = 0; i < NUM; ++i)
....
应该做的伎俩。
如果您只是对使用这些东西感兴趣(与编写这些宏相比),您可以使用P99 预处理器块来实现类似的东西P99_PARALLEL_FOR
并P99_PARALLEL_FORALL
使用这些技巧。
There was gcc developer discussion about a patch that accepted a "-fexpand-pragmas" command-line option in 2006:
http://gcc.gnu.org/ml/gcc-patches/2006-10/msg00084.html
but that option does not appear to be recognized