为什么对齐的参数正确编译,但在运行时崩溃?

时间:2012-11-19 19:01:37

标签: c++ visual-studio-2010

我在两个VS2010项目中有这个代码:

__declspec(align(16)) struct S {
    int a;
};

void f(S v) {}

它不应该编译,因为你不能将对齐的参数传递给函数(除非你通过引用传递它们);正如我所料,一个项目 拒绝它。但是另一个项目将它编译成O.K.然后它在运行时崩溃。

我的问题是:为什么要允许编译?

我查看了所有编译器选项,但找不到任何相关内容。

1 个答案:

答案 0 :(得分:0)

您是否确认在任何地方都没有定义名为'align'的宏?如果没有,那么放置

#undef align

紧接在代码上方并重新编译。如果失败,那么你就可以在某处定义宏。