带参数的Visual C ++ 2010解决方案范围的宏

时间:2010-05-31 14:32:50

标签: c++ visual-studio-2010 visual-c++ c-preprocessor

我正在尝试使用Visual C ++ 2010 Express编译一些源代码。代码是为GCC编写的,包含如下属性:

struct something {
...
} __attribute__((packed));

由于这不是标准的C ++语法,因此Visual C ++无法识别它。在结构声明之前使用此宏,它可以正常工作:

#define __attribute__(p)

但我不想改变文件。我创建了一个新的属性表(GccCompat),然后转到预处理器定义,并添加了宏,如下所示:

__attribute__(p)

或者像这样:

__attribute__(p)=

但它不起作用。它根本就没有被调用。如果我在同一位置仅定义__attribute__(不带参数),则会正确定义宏。请注意,生成的命令行看起来很好(带参数的宏与没有参数的宏完全相同),但编译器似乎忽略它。那么,如何使用参数全局定义宏?

2 个答案:

答案 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方便。