gcc检测选项;转发对‘的引用;枚举’;“类型”;

gcc检测选项;转发对‘的引用;枚举’;“类型”;,c,gcc,enums,C,Gcc,Enums,当使用gcc和-Werror=pedantic编译以下代码时,它将报告错误:ISO C禁止转发对“enum”类型[-Werror=pedantic]的引用 enum foo foo_test(void); enum foo { FOO_0 }; enum bar { BAR_0 }; int main(int argc, char **argv) { printf("sizeof(enum foo) %zu, sizeof(enum bar) %zu\n",

当使用gcc和
-Werror=pedantic
编译以下代码时,它将报告
错误:ISO C禁止转发对“enum”类型[-Werror=pedantic]
的引用

enum foo foo_test(void);

enum foo {
    FOO_0
};

enum bar {
    BAR_0
};

int main(int argc, char **argv)
{
    printf("sizeof(enum foo) %zu, sizeof(enum bar) %zu\n",
           sizeof(enum foo), sizeof(enum bar));
    return 0;
}
在我的项目中,我使用了许多第三方开放源代码,一些源代码也存在上述问题。如果我将
-Werror=pedantic
添加到gcc选项中,将导致许多错误。我只想检测有关转发引用“enum”类型的错误,但不检测额外的错误。是否有其他gcc选项可以报告此错误


gcc版本:arm none eabi gcc v4.9.3

使用
-pedantic
而不使用任何
-Werror
。它只会产生一个警告,但不会停止编译。您可以将所有这些诊断收集到日志文件中,然后通过
grep
ping对其进行分析。比如说

% make 2> errors.log
% grep -A 3 "ISO C forbids forward references to 'enum' types" errors.log

在上测试代码。即使没有
-Werror=pedantic
@xvan-um,它也无法编译,也许是错误的链接?请注意,编译器必须是GCC才能编译,它使用的是GCCextension@xvan认真地我找不到一个没有编译的编译器?正确的方法是始终使用
-std=c11-pedantic errors-Wall-Wextra
进行编译,然后确保编译干净。对于ARM环境尤其重要!因为对于同一个核心来说,可以移植到其他编译器。(您可能也希望为ARM重建
-ff
)如果您有一些无法在标准C下编译的开源垃圾,请将其丢弃。请注意,开放源码往往属于“你付出什么就得到什么”的范畴。@Lundin“无法在标准C下编译的开放源码cr*p”包括。。。嗯,Linux等等。