xlC忽略POD上offsetof的选项

时间:2013-04-30 17:42:27

标签: aix pod xlc

摘要

我正在尝试使用AIX 11.1编译器在新的AIX 7机器上编译旧的C ++应用程序。此应用程序在非POD类上使用offsetof。

我将langlvl选项设置为strict98,并设置“offsetnonpod”选项,该选项告诉编译器允许在非POD类上使用offsetof。

如果我删除了offsetnonpod设置并使用extended for 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.

1 个答案:

答案 0 :(得分:0)

该选项将消息从(S)更改为(W)。警告消息将允许编译成功并允许offsetof。

首先把-qlanglvl = strict98作为该选项设置-qlanglvl = nooffsetnonpod

xlC -qlanglvl = strict98 -qlanglvl = offsetnonpod a.cpp “a.cpp”,第11.18行:1540-1281(W)“offsetof”不能应用于“struct Foo”。它不是POD(普通旧数据)类型。