2013-04-30 44 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