C++ gcc-4.8.1中氧气优化水平的建议警告标志
我最近从gcc-4.2.4迁移到了gcc-4.8.1。gcc-4.8.1中氧气优化级别的建议gcc警告选项是什么 我在gcc-4.2.4中使用了以下警告标志:C++ gcc-4.8.1中氧气优化水平的建议警告标志,c++,c,gcc,gcc-warning,C++,C,Gcc,Gcc Warning,我最近从gcc-4.2.4迁移到了gcc-4.8.1。gcc-4.8.1中氧气优化级别的建议gcc警告选项是什么 我在gcc-4.2.4中使用了以下警告标志: -Wall-Wno括号-Wpointer arith-Wcast align-Wsign compare-Wnon virtual dtor-Wnon template friend-Woverloaded virtual-Wsign promo我推广的约定是: -Wall -Wextra -pedantic 请访问GCC文档,以了解有
-Wall-Wno括号-Wpointer arith-Wcast align-Wsign compare-Wnon virtual dtor-Wnon template friend-Woverloaded virtual-Wsign promo我推广的约定是:
-Wall -Wextra -pedantic
请访问GCC文档,以了解有关启用哪些特定标志的详细信息。取决于要构建的目标。 对于ubuntu,我会:
CWARN =-Wall -Wextra -Wattributes -Wbuiltin-macro-redefined -Wcast-align -Wconversion -Wdeclaration-after-statement \
-Wdiv-by-zero -Wdouble-promotion -Wenum-compare -Wfloat-equal -Wimplicit-int -Winit-self -Wint-to-pointer-cast \
-Wjump-misses-init -Wlogical-op -Wmissing-braces -Wmissing-field-initializers -Wmissing-parameter-type \
-Woverflow -Wpointer-arith -Wpointer-sign -Wpointer-to-int-cast -Wredundant-decls -Wreturn-type -Wshadow \
-Wsign-compare -Wtype-limits -Wuninitialized -Wwrite-strings \
-Wno-unused-parameter -Wno-multichar -Wno-strict-aliasing
CXXWARN =-Wall -Wextra -Wattributes -Wbuiltin-macro-redefined -Wc++0x-compat -Wcast-align -Wconversion -Wdiv-by-zero \
-Wdouble-promotion -Wenum-compare -Wfloat-equal -Winit-self -Wint-to-pointer-cast -Wlogical-op -Wmissing-braces \
-Wmissing-field-initializers -Woverflow -Wpointer-arith -Wredundant-decls -Wreturn-type -Wshadow -Wsign-compare \
-Wsign-promo -Wtype-limits -Wuninitialized -Wwrite-strings \
-Wno-unused-parameter -Wno-multichar -Wno-strict-aliasing
对于独立内核开发,我执行以下操作:
CWARN =-Wall -Wextra -Wattributes -Wbuiltin-macro-redefined -Wcast-align -Wconversion \\
-Wdiv-by-zero -Wdouble-promotion -Wenum-compare -Wfloat-equal -Winit-self \\
-Wint-to-pointer-cast -Wlogical-op -Wmissing-braces -Wmissing-field-initializers \\
-Woverflow -Wpointer-arith -Wredundant-decls -Wreturn-type -Wshadow -Wsign-compare \\
-Wtype-limits -Wuninitialized -Wwrite-strings \\
-Wno-unused-parameter -Wno-unused-variable -Wno-multichar -Wno-unused-but-set-variable \\
-Wdeclaration-after-statement -Wimplicit-int -Wjump-misses-init -Wpointer-sign \\
-Wpointer-to-int-cast -Wmissing-parameter-type
CXXWARN =-Wall -Wextra -Wattributes -Wbuiltin-macro-redefined -Wcast-align -Wconversion \\
-Wdiv-by-zero -Wdouble-promotion -Wenum-compare -Wfloat-equal -Winit-self \\
-Wint-to-pointer-cast -Wlogical-op -Wmissing-braces -Wmissing-field-initializers \\
-Woverflow -Wpointer-arith -Wredundant-decls -Wreturn-type -Wshadow -Wsign-compare \\
-Wtype-limits -Wuninitialized -Wwrite-strings \\
-Wno-unused-parameter -Wno-unused-variable -Wno-multichar -Wno-unused-but-set-variable \\
-Wc++0x-compat -Wsign-promo
有些警告是通过-Wextra或friends打开的,但我只想显式地打开它们,如果命令行不太长,也不会有什么坏处
对于android和iOS,您可能还需要关闭一些警告,以减少标准库中的噪音
如果你可能想知道有很多标志会有点过分,但这会让编译器诚实地对待任何糟糕的编程实践,它可能不是来自你,而是来自你的队友。我推荐所有这些标志(至少
-Wall-Wextra-pedantic
),并且只禁用那些你确实找不到合理方法修复的标志。不过,这有点主观。-Wall-Wextra-Werror
不要忘记-Werror
,否则构建脚本将继续运行(可能不正确)program@Brandin:某些警告仅在启用优化时出现(因为严格的别名…-Werror
可能适用于您自己的代码,但将其用于第三方构建和自动工具/配置脚本通常会失败。像AC_LANG_SOURCE
这样的宏通常是罪魁祸首。-Werror
对于其他人构建的代码来说不是一个好主意:新/旧编译器版本总是会发出不同的警告,导致编译失败,而可能没有任何严重错误。如果必须,请将其用作开发工具,但在默认情况下不要强迫他人使用。这是一种非常简单的方法,他提到的许多标志都不会启用。@KarolyHorvath:它根本不是“简单的”。他问“gcc-4.8.1中O2优化级别的建议gcc警告选项是什么?”而不是“我现在要列出的gcc警告选项是什么?”如果他想添加更多,当然欢迎他加入,但我建议不要这样做,除非你知道出于某些特定原因需要。严重(开源)我看到的项目至少使用了十几个标志,所以如果这是你的建议,那么是的,我发现它非常简约…@RYUZAKI:优化级别与警告有什么关系?你的问题太笼统了:你只是说有“一些警告”你想“清理”,但没有告诉我们它们是什么,我们帮不了你。我真的不明白你为什么需要帮助:如果有你不想设置的警告,请取消设置。这不是火箭科学。如果编译器在特定的优化级别上发出警告,这可能意味着有人滥用了未定义的行为,这将在以后用大量的调试时间折磨你。即使是拥有百万代码的项目,也应该认真对待它,并且值得做的是,保持警告为少,如果不是零的话。