2013-04-30 24 views
0

摘要

我試圖在AIX 11.1編譯器的新AIX 7機器上編譯舊的C++應用程序。此應用程序在非POD類上使用offsetof。xlC忽略POD上的offsetof選項

我將langlvl選項設置爲strict98,並設置「offsetnonpod」選項,該選項告訴編譯器在非POD類上允許offsetof。

如果我刪除offsetnonpod設置並使用langlvl擴展,則會出現相同的錯誤。 看來我必須在指定offsetnonpod選項時出錯,或者編譯器實際上不支持這種功能。

實施例代碼

#include <iostream> 

struct Foo 
{ 
private: 
    int x; 
}; 

int main() 
{ 
    std::cout << offsetof(Foo, x); 
    return 0; 
} 

我建立與此命令:

xlc++_r -qlanglvl=offsetnonpod -qlanglvl=strict98 test.cpp 

我也得到這樣的:

"test.cpp", line 11.32: 1540-0287 (S) "offsetof" must not be applied to "struct Foo". It is not a POD (plain old data) type. 

回答

0

選項從(S)改變消息( W)。警告消息將允許編譯成功,並允許offsetof。

穿戴-qlanglvl = strict98第一作爲選項將設置-qlanglvl = nooffsetnonpod

方xIC -qlanglvl = strict98 -qlanglvl = offsetnonpod a.cpp 「a.cpp」,線路11.18:1540年至1281年(W )「offsetof」不能應用於「struct Foo」。它不是POD(普通舊數據)類型。

+0

哇,謝謝你指出。這是殘酷的......在一個大消息中改變一個角色。我想在將來閱讀時我會更加謹慎。 – user1145530 2013-05-01 12:56:16