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