代码之家  ›  专栏  ›  技术社区  ›  KJ7LNW

有没有办法定义包含预处理器指令的预处理器宏?

  •  2
  • KJ7LNW  · 技术社区  · 4 年前

    有几个循环我想让编译器用下面的代码展开。它很长,我不想复制粘贴。

    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     
    

    但是当我使用 foo 在代码中 cpp 显示其无效扩展为:

     #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
    
    1 回复  |  直到 4 年前
        1
  •  4
  •   chqrlie    4 年前

    您不能以问题中显示的方式定义预处理指令。

    然而,您可能可以使用 _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