2012-11-19 45 views
4

我有這樣的代碼有兩種VS2010項目:爲什麼對齊參數編譯正確,但在運行時崩潰?

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

void f(S v) {} 

它不應該編譯,因爲你無法通過對齊函數的參數(除非你通過引用傳遞);和一個項目確實拒絕它,如我所料。但另一個項目將其編譯爲O.K.,然後在運行時崩潰。

我的問題是:爲什麼這個被允許編譯?

我查看了所有的編譯器選項,我找不到任何相關的東西。

+3

無重放。 Visual C++ 2010的RTM和SP1版本都會發出預期的診斷:「'錯誤C2719:'v':具有__declspec(align('16'))的形式參數不會與默認編譯選項對齊。請發佈一個完整的repro來證明問題。 –

+0

我無法用多個文件發佈整個項目。我的問題是,可以以某種方式禁用此錯誤。 –

+0

不,不能禁用錯誤。 –

回答

0

您是否驗證過您沒有在任何地方定義的名爲'align'的宏?如果沒有的話,請立即放置

#undef align 

緊接上面的代碼並重新編譯。如果失敗了,那麼你在某個地方定義了這個宏。

相關問題