如何让GCC 6.3.0版本C编译器正常触发预期代码警告?
问题分析与解决
关于缺失return语句的警告
在C99及后续标准中(GCC 6.3.0默认采用该标准),main函数如果没有显式的return语句,会隐式返回0,因此即使使用-Wall或-Wreturn-type编译选项,也不会触发警告。若要得到教材中提到的警告,需切换到C89标准编译,命令如下:
gcc -std=c89 -Wreturn-type -o warning hello_warning.c
此时GCC会针对缺失return语句发出警告。
关于缺失字符串右引号的问题
你描述的缺失printf参数右引号的情况,在标准C中属于语法错误,而非警告——GCC应该直接编译失败,根本无法生成可执行文件。但你的程序成功编译并运行,说明以下两种情况之一:
- 你的代码实际并未缺失右引号(可能是编写问题描述时的笔误,或编辑代码时误操作保留了引号);
- 代码中存在你未注意到的语法细节(比如行尾添加了反斜杠
\,使得字符串可以跨多行延续,或者存在不可见字符干扰)。
请仔细检查你的代码,确认右引号确实被移除。如果确认无误,GCC 6.3.0必然会输出类似error: missing terminating " character的错误信息,而非警告。
内容的提问来源于stack exchange,提问作者Sofia Zaiafarova
相关产品推荐
相关产品推荐

