我认为较新版本的GCC带有令人不快的功能:他们试图对我进行第二次猜测,散发出无用的“你是说意思吗?”淹没其他警告的建议。
例如:
$ gcc -Wall -c -o /dev/null -xc - <<'EOT'
#include <stdlib.h>
void foo(char *b, size_t z){ readlink("/foo", b, z); }
EOT
<stdin>: In function ‘foo’:
<stdin>:3:30: warning: implicit declaration of function ‘readlink’;
did you mean ‘realloc’? [-Wimplicit-function-declaration]
不,我不是说
realloc
;我只是忘了包含unistd.h
标头。有什么办法可以关闭此功能吗?
我想只打印
implicit declaration of function ‘readlink’ [-Wimplicit-function-declaration]
,没有有用的建议。 最佳答案
事实证明,它只是硬编码的,没有办法将其关闭。
从gcc source:
3328 warned = warning_at
3329 (&richloc, OPT_Wimplicit_function_declaration,
3330 G_("implicit declaration of function %qE; did you mean %qs?"),
3331 id, suggestion);
[并且,返回结果时,
lookup_name_fuzzy()
和hint.suggestion ()
都不会考虑任何命令行选项]使用某些外壳魔术过滤错误输出,例如。与
{ gcc ... 2>&1 >&3 | sed 's/; did you mean [^?]*[?]//' >&2; } 3>&1
并不是真正的解决方案,首先是因为它不能在makefile中使用(命令行的错误状态将是
sed
或任何过滤器的错误状态,而不是gcc的错误状态),其次是因为它仍然会留下类似的内容: void foo(char *b, size_t z){ readlink("/foo", b, z); }
^~~~~~~~
realloc
这将需要一些复杂的逻辑来过滤掉。
[使用bash / kshisms之类的
2> >(...)
也不有助于第一点,因为make
将使用/bin/sh
,而不是用户的外壳程序]关于c - 在GCC中停用“您的意思是……”建议,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58735374/