所以我以前认为使用-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
仍然允许扩展,它只禁止在标准中禁止显示。