除了-std和-pedantic-errors之外,我还需要哪些GCC参数才能实现可移植性?

时间:2017-10-16 18:03:19

标签: c gcc c11 gcc-pedantic

所以我以前认为使用-std=c11-pedantic-errors足以迫使gcc仅编译也可以在其他符合标准的编译器上编译的代码(可能在其他平台上,假设没有使用特定于平台的库),例如其他版本的gcc或其他完全编译器。

然而,显然在Windows 7下使用-pedantic-errors -std=c11进行mingw编译允许编译包含此代码的代码:

struct foo {
    //(some members)
};
struct bar {
    struct foo; //note the lack of a member name
    //(other members)
};

导致相同的代码,同时使用gcc同时使用-pedantic-errors -std=c11在Ubuntu下使用error: declaration does not declare anything

如果匿名成员不能在ISO-C11中被允许,那么为什么gcc首先允许该代码通过?关于-pedantic-errors -std=c11实际做什么,我错过了什么?还需要哪些其他参数(如果有的话)以确保gcc仅编译符合标准的代码,足以在其他版本的gcc,其他平台和/或其他编译器上工作,因为这些编译器本身是标准兼容的?即使其在各个平台上保持一致。

我不是在问-pedantic-errors的目的是什么,但是什么参数可以强制gcc只编译将在任何地方编译的代码(即没有gcc特定的扩展或非标准的东西#&}# 39;总是工作)。所以-pedantic-errors但更严格,因为-pedantic-errors仍然允许扩展,它只禁止在标准中禁止显示。

0 个答案:

没有答案