我(迅速)编写了一些代码,并且不小心将scanf()
中的参数反转了:
char i[] = "ABC1\t";
scanf(i, "%s");
使用
gcc -Werror -Wall -Wextra
进行编译不会对此有所抱怨。显然,这段代码不起作用,但是为什么gcc不能通知我我颠倒了参数呢?它不能检测到i
不是格式字符串,或者第二个参数不是可存储类型吗?编辑
感谢所有的洞察力,看起来我找到了答案,
-Wformat
标志出现了扭曲,使此“可捕获”(在下面发布以供引用) 最佳答案
哈!我找到了。用-Wformat=2
标志击中gcc捕获了它。
发布信息以供他人引用:
这是list of flags I found-WformatCheck calls to printf and scanf, etc., to make sure that the arguments supplied have types appropriate to the format string specified...
我以为-Wall
中包含-Wformat
,确实如此,但是关于我刚刚发现的内容的真正重要部分是:-Wformat is included in -Wall. For more control over some aspects of format checking, the options -Wformat-y2k, -Wno-format-extra-args, -Wno-format-zero-length, -Wformat-nonliteral, -Wformat-security, and -Wformat=2 are available, but are not included in -Wall.