0

概括

我正在尝试使用 AIX 11.1 编译器在新的 AIX 7 机器上编译旧的 C++ 应用程序。此应用程序在非 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.
4

1 回答 1

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(普通旧数据)类型。

于 2013-05-01T12:13:47.800 回答