使用GCC的-fms扩展是不是一个坏主意?

时间:2012-12-31 20:53:04

标签: c gcc

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

struct a {
    int x;
}

struct b {
    int y;
    struct a;
}

这样,只需使用x即可访问struct b中的b.x元素。这非常有用,但它似乎是由GCC模拟的Microsoft扩展。

使用此选项会使我的代码不那么便携,还是被认为是“安全”使用?

3 个答案:

答案 0 :(得分:14)

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

答案 1 :(得分:6)

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

答案 2 :(得分:4)

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