c++ - 宏调用中的 #ifdef 适用于 gcc 但不适用于 msvc

标签 c++ visual-c++ gcc macros variadic-macros

<分区>

我有一个带有可变参数的宏 TYPELIST。我想要类似的东西

typedef TYPELIST(A
                ,B
                ,C
                ,D
#ifdef BLA_
                ,E
#endif
                ,F)

这与 gcc 完美配合。但是,当我尝试使用 MSVC 编译它时,它会将 ifdef 和 endif 解析为宏参数。我知道一种方法是将宏调用放在 ifdef 中。但是,如果我有一个巨大的列表,并且如果我想根据定义的不同宏包含不同的类,那将变得乏味。为什么这适用于 gcc 而不适用于 MSVC 是否有特殊原因?

最佳答案

在宏中使用#ifdef 是不合法的。我有点惊讶 gcc 允许这样做。恐怕您必须将 #ifdef 放在整个定义周围,即

#ifdef BLA_
    typedef TYPELIST(a,b,c,d,e,f)
#else
    typedef TYPELIST(a,b,c,d,f)
#endif

关于c++ - 宏调用中的 #ifdef 适用于 gcc 但不适用于 msvc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19111383/

相关文章:

c++ - PkgConfig 模块 : INCLUDE_DIRS not listing all directories

c++ - 检测路径是绝对的还是相对的

c++ - 究竟什么时候复制返回值

c# - C# 中的 void* 是什么?

c++ - gnu gcc 如何抑制警告 : ‘typedef’ was ignored in this declaration [enabled by default]

c++ - 从 char** 到 const char** 的隐式转换

c++ - 使用 QT 的最小 OpenGL 离屏渲染

C++ 文件解析参数个数

c++ - 窗口标题 Qt 中的小部件

c++ - MSVC/FA GCC 等效项