【问题标题】:xlC ignores option for offsetof on PODxlC 忽略 POD 上的 offsetof 选项
【发布时间】:2013-04-24 17:26:51
【问题描述】:

总结

我正在尝试使用 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.

【问题讨论】:

    标签: c++ aix xlc


    【解决方案1】:

    该选项将消息从 (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(plain old data)类型。

    【讨论】:

    • 哇,感谢您指出这一点。这太残忍了……在一条大信息中改变一个字符。我想我以后阅读会更加小心。
    猜你喜欢
    • 2021-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-19
    • 2018-07-05
    • 2016-03-10
    • 2010-11-28
    相关资源
    最近更新 更多