hel*_*hod 17 gcc warnings debug-symbols
我只是深入研究gcc手册,有些事情我还不清楚:
ndi*_*dim 24
如果你正在写一个库,请不要确保一个简单的程序一样
#include <yourlib.h>
int main() {
return 0;
}
Run Code Online (Sandbox Code Playgroud)
即使编译器在最迂腐模式下运行并且启用了所有可选警告,编译也没有任何警告.
如果您正在编写应用程序,则代码向左和向右抛出警告只是您的应用程序的问题.但是,对于库的公共头文件,后来使用该库的每个人都将被迫忽略或忍受代码导致的警告.
因此,请检查您的库头是否在没有警告的情况下编译,如果可能,请在多种编译器模式
$ gcc -Wall -Wextra -Werror -std=c99 -pedantic
$ gcc -Wall -Wextra -Werror -std=gnu99 -pedantic
$ gcc -Wall -Wextra -Werror -std=c89 -pedantic
$ gcc -Wall -Wextra -Werror -std=gnu89 -pedantic
Run Code Online (Sandbox Code Playgroud)
小智 8
所有这些都是意见问题和/或取决于您的代码库和编程实践.我总是用-Wall和编译-pedantic,我不关心事情是否被标记为错误或警告,所以我从不使用-Werror,我很少使用调试器调试代码 - 当我这样做时,-g就足够了.其他人可能会提出一个完全不同的答案.
这些都是高度主观的.以下是我的意见:
您的使用-pedantic不应与您的使用挂钩-std=foo.-pedantic如果您想要迂腐错误消息,请使用; 如果你使用-pedantic,你可能也想-Wall和-Wextra,因为你的目标通常是捕捉一切可能的失误,无论多么轻微.请注意,-pedantic不会捕获所有可能的警告,只会发出ISO C标准要求诊断的警告.
我总是发现2级(默认值-g)足以满足我的目的.级别3还包括有关程序中所有宏定义的信息,但这仅在调试器支持宏扩展时才有用.我没有(GNU gdb 6.3.50-20050815(Apple版gdb-696)).我不知道3级还包括哪个级别2没有.
那要看.如果您的目标是制作最便携,最符合标准的代码,那么是的,我强烈建议始终使用-Werror和-pedantic-error(以及-Wall和-Wextra),特别是在开始新项目时.但是,如果您从大型代码库开始,打开这些选项可能会给您带来大量无害,虚假的错误,特别是对于签名/无符号不匹配以及各种类型之间的隐式转换.您需要花费很长时间来修复代码库以消除这些错误,因此我不建议您这样做.
如果你正在做一个快速的一次性项目,不要打扰,因为这些只会减慢你的速度.
如果您正在使用图书馆或某些可以开源的东西,那么请打开它们.您的用户将非常感谢您的代码不会产生错误或警告.同时考虑ndim的建议.