我正在尝试使用Visual C ++ 2010 Express编译一些源代码。代码是为GCC编写的,包含如下属性:
struct something {
...
} __attribute__((packed));
由于这不是标准的C ++语法,因此Visual C ++无法识别它。在结构声明之前使用此宏,它可以正常工作:
#define __attribute__(p)
但我不想改变文件。我创建了一个新的属性表(GccCompat),然后转到预处理器定义,并添加了宏,如下所示:
__attribute__(p)
或者像这样:
__attribute__(p)=
但它不起作用。它根本就没有被调用。如果我在同一位置仅定义__attribute__
(不带参数),则会正确定义宏。请注意,生成的命令行看起来很好(带参数的宏与没有参数的宏完全相同),但编译器似乎忽略它。那么,如何使用参数全局定义宏?
答案 0 :(得分:1)
这可能是不可能的,至少是这样。请注意,Microsoft的documentation of the /D option未指定带参数的宏的语法。
答案 1 :(得分:1)
在IDE中定义宏通常侧重于为编译器创建/ D:CPP_TOKEN标志的性质,即#define CPP_TOKEN。
在高级编译器设置中,您可以将这样的宏定义为/ D:“属性(p)= / 无 /”或类似的东西。只需打开VS命令提示符,看看它的内容。 GCC 4.2将允许类似的东西(使用它的-D开关),但我没有MSVC10方便。