clang 使用 mingw 头文件编译时不出现部分警告

2023-10-13 21:56:07 +08:00
 snylonue

最近在 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 显示相同警告

1296 次点击
所在节点    程序员
7 条回复
tianshilei1992
2023-10-13 22:22:58 +08:00
去 llvm-project 开个 issue ,这个是得报的
snylonue
2023-10-13 22:58:57 +08:00
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
測了上面兩個,都沒問題
ysc3839
2023-10-13 23:22:57 +08:00
前面两个 clang 都是同一个?怀疑是跟 clang --version 里的 target 有关,用 MSYS2 装个 clang 试试吧。
tianshilei1992
2023-10-13 23:44:51 +08:00
@snylonue 👍 没有 Windows 机器不能 debug ,只能给把 labels 给加上了
tool2d
2023-10-14 03:19:26 +08:00
试了一下,我也没报
llvm-mingw-20220906-msvcrt-i686/bin/i686-w64-mingw32-clang++.exe

别的平台 clang 没问题。
snylonue
2023-10-15 21:08:08 +08:00
@ysc3839
@lsry
我这边用 msys2 装的 clang 也没报(不是很熟悉这些工具链,不知道有没有装对

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/981850

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX