.c文件默认被C编译器编译。C编译器对某些问题,默认只报警告而不是错误;在gcc下也许还能正常运行,但VS下很可能crash;又或者在ARM平台上偶尔crash。通过设定编译选项(CFLAGS),让每一个不容忽视的警告强制报错,提前暴露问题,及早解决,从而编写合格的C代码。
下列警告应当视作错误(血泪教训):
VS下为/we4013
。gcc下用-Werror=implicit-function-declaration
VS下为/we4133
。gcc下用-Werror=incompatible-pointer-types
VS下为/we4716
。gcc下用-Werror=return-type
强烈推荐使用CMake作为构建工具,然后在CMakeLists.txt中添加:
if (CMAKE_SYSTEM_NAME MATCHES "Windows")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /we4013 /we4133 /we4716")
elseif (CMAKE_SYSTEM_NAME MATCHES "Linux" OR CMAKE_SYSTEM_NAME MATCHES "Darwin")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Werror=implicit-function-declaration -Werror=incompatible-pointer-types -Werror=return-type")
endif()
其他配置方式说明:
#pragma warning (error: xxxx)
。缺点:只有visual studio工程能用;不能确保所有文件有效gcc gcc xxx.c -Werror=implicit-function-declaration
CMakeLists.txt中配置说明:set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /weXXXX")
(windows)或set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Werror=xxxx")
。
其中,windows格式中XXXX为警告编号;gcc下xxxx为警告对应的字符串。这种方式个人推荐。
原文:https://www.cnblogs.com/zjutzz/p/10802138.html