GCC 有一个选项,-fms-extensions
允许使用匿名结构成员:
struct a {
int x;
}
struct b {
int y;
struct a;
}
这允许通过使用简单地访问x
元素。这非常有用,但它似乎是 GCC 模拟的 Microsoft 扩展。struct b
b.x
使用此选项会降低我的代码的可移植性,还是认为它使用“安全”?
如果您正在寻找兼容性,那么设置宽松的编译器选项绝不是一个好主意,更严格 - 更便携
考虑到在 2011 版标准 (C11) 中添加了一个看起来等效的功能,称为匿名结构和联合,我会说使用此功能并不是一个坏主意。MS 编译器支持它,GCC 和“GNU C”兼容的编译器支持它,并且符合现代标准的新编译器支持它。
标志 -fms-extensions 用于“接受 Microsoft 头文件中使用的一些非标准结构。”。GCC 很强大,因为它是为不同的标准创建的,所以我认为在适当的情况下使用它不是一个坏主意。