我想用下面的代码引导编译器展开几个循环。它很长,我不想复制粘贴。
#define语句可以定义预处理器宏吗?
我试过这个:
#define foo
#ifdef __GNUC__
#if __GNUC__ >= 8
#pragma GCC unroll 128
#pragma GCC ivdep
#endif
#endif
#ifdef __clang__
#pragma clang loop vectorize(enable) interleave(enable)
#endif
但当我在代码cpp
中使用foo
时,它显示为:无效扩展
#ifdef 4 #if 4 >= 8 #pragma GCC unroll 128 #pragma GCC ivdep #endif #endif #ifdef __clang__ #pragma clang loop vectorize(enable) interleave(enable) #endif
#ifdef 4 #if 4 >= 8 #pragma GCC unroll 128 #pragma GCC ivdep #endif #endif #ifdef __clang__ #pragma clang loop vectorize(enable) interleave(enable) #endif
您不能以问题中显示的方式定义预处理指令。
然而,您可以将_Pragma
运算符用于您的目的:
#if defined __GNUC__ && __GNUC__ >= 8
#define foo _Pragma("GCC unroll 128") _Pragma("GCC ivdep")
#elif defined __clang__
#define foo _Pragma("clang loop vectorize(enable) interleave(enable)")
#else
#define foo
#endif