【问题标题】:gcc switch -Wc++0x-compat is being used for C codegcc 开关 -Wc++0x-compat 用于 C 代码
【发布时间】:2014-01-09 15:56:57
【问题描述】:

我正在尝试尽可能多地使用 gcc 警告开关,以确定它们是否有助于使我的代码更清晰甚至发现问题。

我将这些警告开关用于 C:

warnings_common = ['-Werror', '-Wfatal-errors', '-Wpedantic', '-pedantic', '-pedantic-errors', '-Wall', '-Wextra', '-Wchar-subscripts', '-Wcomment', '-Wno-coverage-mismatch', '-Wno-cpp', '-Wdouble-promotion', '-Wformat', '-Wnonnull', '-Winit-self', '-Wimplicit-int', '-Wimplicit-function-declaration', '-Wimplicit', '-Wignored-qualifiers', '-Wmain', '-Wmissing-braces', '-Wmissing-include-dirs', '-Wparentheses', '-Wsequence-point', '-Wno-return-local-addr', '-Wreturn-type', '-Wswitch', '-Wswitch-default', '-Wswitch-enum', '-Wsync-nand', '-Wtrigraphs', '-Wunused-but-set-parameter', '-Wunused-but-set-variable', '-Wunused-function', '-Wunused-label', '-Wunused-local-typedefs', '-Wunused-parameter', '-Wno-unused-result', '-Wunused-variable', '-Wunused-value', '-Wunused', '-Wuninitialized', '-Wmaybe-uninitialized', '-Wunknown-pragmas', '-Wno-pragmas', '-Wstrict-aliasing', '-Wstrict-overflow', '-Warray-bounds', '-Wno-div-by-zero', '-Wsystem-headers', '-Wtrampolines', '-Wfloat-equal', '-Wtraditional', '-Wtraditional-conversion', '-Wdeclaration-after-statement', '-Wundef', '-Wno-endif-labels', '-Wshadow', '-Wno-free-nonheap-object', '-Wunsafe-loop-optimizations', '-Wno-pedantic-ms-format', '-Wpointer-arith', '-Wtype-limits', '-Wbad-function-cast', '-Wc++-compat', '-Wc++11-compat', '-Wcast-qual', '-Wcast-align', '-Wwrite-strings', '-Wclobbered', '-Wconversion', '-Wempty-body', '-Wenum-compare', '-Wjump-misses-init', '-Wsign-compare', '-Wsign-conversion', '-Wsizeof-pointer-memaccess', '-Waddress', '-Wlogical-op', '-Waggregate-return', '-Wno-aggressive-loop-optimizations', '-Wno-attributes', '-Wno-builtin-macro-redefined', '-Wstrict-prototypes', '-Wold-style-declaration', '-Wold-style-definition', '-Wmissing-parameter-type', '-Wmissing-prototypes', '-Wmissing-declarations', '-Wmissing-field-initializers', '-Wno-multichar', '-Wno-deprecated', '-Wno-deprecated-declarations', '-Wno-overflow', '-Woverride-init', '-Wpacked', '-Wpacked-bitfield-compat', '-Wpadded', '-Wredundant-decls', '-Wnested-externs', '-Winline', '-Wno-int-to-pointer-cast', '-Wno-pointer-to-int-cast', '-Winvalid-pch', '-Wlong-long', '-Wvariadic-macros', '-Wvarargs', '-Wvector-operation-performance', '-Wvla', '-Wvolatile-register-var', '-Wdisabled-optimization', '-Wpointer-sign', '-Wstack-protector', '-Woverlength-strings', '-Wunsuffixed-float-constants']

但我收到此错误:

cc1: error: command line option '-Wc++0x-compat' is valid for C++/ObjC++ but not for C [-Werror]

这似乎很奇怪,因为我正在编译一个 C 文件:

int main(void);

int main(void) {
  return 0;
}

上面的哪个开关在调用'-Wc++0x-compat',为什么?

【问题讨论】:

  • -Wall 触发这个,我不知道其他标志是否这样做,但Wall 是肯定的。 gcc.gnu.org/onlinedocs/gcc-4.3.6/gcc/Warning-Options.html
  • 尝试取出'-Wc++11-compat'c++0xc++11 的旧名称
  • woolstar 给出了正确的答案,但您知道,您可以尝试删除标志,直到错误消失...
  • 好的,我在看gcc.gnu.org/onlinedocs/gcc/Warning-Options.html,它没有提到'-Wc++0x-compat'。 gcc 的手册页也没有提到这个开关。我使用的是 4.8.1 版。
  • @user2242584 我重复woolstar 的建议:从您的列表中删除-Wc++11-compat

标签: c gcc gcc-warning


【解决方案1】:

对于gcc(和其他编译器),一些标志只是更大标志集的占位符,例如-Wall,您可以在gcc documentation 中阅读有关这些标志的信息。

如果您想禁用特定标志,请使用 -Wno 前缀,如果您只想禁用此标志,请使用 -Wno-c++0x-compat

【讨论】:

  • 我试过了,但是“cc1: error: command line option '-Wno-c++0x-compat' 对 C++/ObjC++ 有效,但对 C [-Werror] 无效”
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-06-08
  • 2011-12-01
  • 1970-01-01
  • 2013-06-25
  • 2013-10-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多