gcc可以用' -W'开始的选项请求许多特定的警告. 反之, 每个特定的警告选项也有一个以“- wno -”开头的否定形式来关闭警告; 具体选项参见:
Warning Options - Using the GNU Compiler Collection (GCC)
其中, 2个选项值得注意:
-w
Inhibit all warning messages.
-Werror
Make all warnings into errors.
-w 关闭所有warning, 而 -Werror 将所有warning视为error.
前者-w关闭所有warning自然需要慎用.
后者-Werror有些公司项目为了引起对warning的重视, 默认开启即不允许有任何warning, 为了让代码owner采取主动措施去规避由warning引起的编译error.
有几种方法去修改default -Werror引起的错误.
1) 关闭-Werror选项, 这时将报出所有warning, 而这难免有掩耳盗铃之嫌.
2) 使用-Wno-xxx关闭特定的warning, 自然这些特定warning所引起error也fix了.
3) 个别error在编译器抱怨时, 并没有给出特定的type是什么, 诸如[-Werror]而不是[-Werror=xxx]:
infra/services/vpn/vpnu/vpnApiVpnuServer.c:93:13: error: function declaration isn't a prototype [-Werror=strict-prototypes]
static void vpnuInitConfigData() {
^~~~~~~~~~~~~~~~~~
infra/services/vpn/vpnu/vpnApiVpnuServer.c:125: error: "ENCDATA_PASSWORD" redefined [-Werror]
#define ENCDATA_PASSWORD "8vO5pEhS9zDKkB0888AGsCoAnd8gTLE7"
此时可能既无法用-Wno-xxx关闭特定的warning, 如果同时关闭-Werror也是不妥当的话, 那么对于这类error本身, gcc的warning选项并不能cover到. 这时考虑修改base code去fix这类错误.