V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
snylonue
V2EX  ›  程序员

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

  •  
  •   snylonue · 204 天前 · 1016 次点击
    这是一个创建于 204 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    7 条回复    2023-10-15 21:08:08 +08:00
    tianshilei1992
        1
    tianshilei1992  
       204 天前 via iPhone   ❤️ 1
    去 llvm-project 开个 issue ,这个是得报的
    lsry
        3
    lsry  
       204 天前
    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
        4
    ysc3839  
       204 天前 via Android
    前面两个 clang 都是同一个?怀疑是跟 clang --version 里的 target 有关,用 MSYS2 装个 clang 试试吧。
    tianshilei1992
        5
    tianshilei1992  
       204 天前
    @snylonue 👍 没有 Windows 机器不能 debug ,只能给把 labels 给加上了
    tool2d
        6
    tool2d  
       204 天前
    试了一下,我也没报
    llvm-mingw-20220906-msvcrt-i686/bin/i686-w64-mingw32-clang++.exe

    别的平台 clang 没问题。
    snylonue
        7
    snylonue  
    OP
       202 天前
    @ysc3839
    @lsry
    我这边用 msys2 装的 clang 也没报(不是很熟悉这些工具链,不知道有没有装对
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   774 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 22:30 · PVG 06:30 · LAX 15:30 · JFK 18:30
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.