12

GCC 有一个选项,-fms-extensions允许使用匿名结构成员:

struct a {
    int x;
}

struct b {
    int y;
    struct a;
}

这允许通过使用简单地访问x元素。这非常有用,但它似乎是 GCC 模拟的 Microsoft 扩展。struct bb.x

使用此选项会降低我的代码的可移植性,还是认为它使用“安全”?

4

3 回答 3

14

如果您正在寻找兼容性,那么设置宽松的编译器选项绝不是一个好主意,更严格 - 更便携

于 2012-12-31T20:54:26.200 回答
7

考虑到在 2011 版标准 (C11) 中添加了一个看起来等效的功能,称为匿名结构和联合,我会说使用此功能并不是一个坏主意。MS 编译器支持它,GCC 和“GNU C”兼容的编译器支持它,并且符合现代标准的新编译器支持它。

于 2012-12-31T23:43:53.023 回答
4

标志 -fms-extensions 用于“接受 Microsoft 头文件中使用的一些非标准结构。”。GCC 很强大,因为它是为不同的标准创建的,所以我认为在适当的情况下使用它不是一个坏主意。

于 2012-12-31T20:56:36.760 回答