我(迅速)编写了一些代码,并且不小心将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.

07-24 09:32