代码之家  ›  专栏  ›  技术社区  ›  Programmer

std::max\u align\u t无法打印其值

  •  1
  • Programmer  · 技术社区  · 6 年前

    我正在尝试打印MinGW64中std::max\u align\u t的值。下面是我的代码:

    #include <stdio.h>
    #include <cstddef>
    
    int main()
    {
        printf("max allign: %d\n", alignof(std::max_align_t));
    }
    

    编译时,出现以下错误:

    /c/tools/mingw64/bin/c++.exe test23.cpp -Wall -ftrack-macro-expansion=0 -Werror -std=gnu++14 -Og -g3 -o test23.exe -Wl,--out-implib,test23.a -Wl,--major-image-version,0,--minor-image-version,0  -lkernel32 -luser32 -lgdi32 -lwinspool -lshell32 -lole32 -loleaut32 -luuid -lcomdlg32 -ladvapi32
    test23.cpp: In function 'int main()':
    test23.cpp:6:57: error: format '%d' expects argument of type 'int', but argument 2 has type 'long long unsigned int' [-Werror=format=]
         printf("max allign: %d\n", alignof(std::max_align_t));
                                                             ^
    cc1plus.exe: all warnings being treated as errors
    

    因此,我改为以下代码:

    #include <stdio.h>
    #include <cstddef>
    
    int main()
    {
        printf("max allign: %llu\n", alignof(std::max_align_t));
    }
    

    但在编译过程中,我仍然收到以下错误:

    /c/tools/mingw64/bin/c++.exe test23.cpp -Wall -ftrack-macro-expansion=0 -Werror -std=gnu++14 -Og -g3 -o test23.exe -Wl,--out-implib,test23.a -Wl,--major-image-version,0,--minor-image-version,0  -lkernel32 -luser32 -lgdi32 -lwinspool -lshell32 -lole32 -loleaut32 -luuid -lcomdlg32 -ladvapi32
    test23.cpp: In function 'int main()':
    test23.cpp:6:59: error: unknown conversion type character 'l' in format [-Werror=format=]
         printf("max allign: %llu\n", alignof(std::max_align_t));
                                                               ^
    test23.cpp:6:59: error: too many arguments for format [-Werror=format-extra-args]
    cc1plus.exe: all warnings being treated as errors
    

    如果我从printf中删除“l”,我会返回到相同的错误?如何解决此问题。

    2 回复  |  直到 6 年前
        1
  •  2
  •   fitzbutz    6 年前

    因为您使用的是C++,所以可以使用

    #include <iostream>
    #include <cstddef>
    
    int main()
    {
        std::cout << alignof(std::max_align_t) << '\n';
    }
    
        2
  •  1
  •   YSC    6 年前

    您正在编写C++,请使用流:

    std::cout << "max allign: " << alignof(std::max_align_t) << "\n";
    

    或者如果坚持使用旧的C函数:

    printf("max allign: %zu\n", alignof(std::max_align_t));
    

    根据 man printf , std::size_t 的格式为 "%zu" .