最近在 vscode 中配置了 clangd 插件,发现不会提示 printf/scanf 相关的警告,于是测试了一下
#include <stdio.h> int main() { int i; scanf("%f", &i); printf("%d", i, i ,2); return 0; }
clang -Wall .\warn.c .\warn.c:5:5: warning: 'scanf' is deprecated: This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. [-Wdeprecated-declarations] scanf("%f", &i); ^ C:\Program Files (x86)\Windows Kits\10\Include\10.0.22621.0\ucrt\stdio.h:1275:20: note: 'scanf' has been explicitly marked deprecated here _Check_return_ _CRT_INSECURE_DEPRECATE(scanf_s) ^ C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.36.32532\include\vcruntime.h:355:55: note: expanded from macro '_CRT_INSECURE_DEPRECATE' #define _CRT_INSECURE_DEPRECATE(_Replacement) _CRT_DEPRECATE_TEXT( \ ^ C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.36.32532\include\vcruntime.h:345:47: note: expanded from macro '_CRT_DEPRECATE_TEXT' #define _CRT_DEPRECATE_TEXT(_Text) __declspec(deprecated(_Text)) ^ .\warn.c:5:17: warning: format specifies type 'float *' but the argument has type 'int *' [-Wformat] scanf("%f", &i); ~~ ^~ %d .\warn.c:6:21: warning: data argument not used by format string [-Wformat-extra-args] printf("%d", i, i ,2); ~~~~ ^ 3 warnings generated.
clang -Wall --target=x86_64-w64-mingw32 .\warn.c
gcc 使用相同头文件会显示警告
gcc -Wall .\warn.c .\warn.c: In function 'main': .\warn.c:5:13: warning: format '%f' expects argument of type 'float *', but argument 2 has type 'int *' [-Wformat=] 5 | scanf("%f", &i); | ~^ ~~ | | | | | int * | float * | %d .\warn.c:6:12: warning: too many arguments for format [-Wformat-extra-args] 6 | printf("%d", i, i ,2); |
想知道有没有办法配置 clang 显示相同警告
![]() | 1 shiltian 2023-10-13 22:22:58 +08:00 via iPhone ![]() 去 llvm-project 开个 issue ,这个是得报的 |
![]() | 2 OP |
3 lsry 2023-10-13 23:22:19 +08:00 clang -Wall --target=x86_64-w64-mingw32 test.c test.c:7:17: warning: format specifies type 'float *' but the argument has type 'int *' [-Wformat] 7 | scanf("%f", &i); | ~~ ^~ | %d test.c:8:21: warning: data argument not used by format string [-Wformat-extra-args] 8 | printf("%d", i, i, 2); clang version 17.0.1 Target: x86_64-pc-windows-msvc Thread model: posix (built by Brecht Sanders) clang version 16.0.6 Target: x86_64-w64-windows-gnu Thread model: posix 了上面,都 |
![]() | 4 ysc3839 2023-10-13 23:22:57 +08:00 via Android 前面两个 clang 都是同一个?怀疑是跟 clang --version 里的 target 有关,用 MSYS2 装个 clang 试试吧。 |
![]() | 6 tool2d 2023-10-14 03:19:26 +08:00 试了一下,我也没报 llvm-mingw-20220906-msvcrt-i686/bin/i686-w64-mingw32-clang++.exe 别的平台 clang 没问题。 |