std :: max_align_t无法打印其值

时间:2018-01-11 09:49:27

标签: c++ mingw mingw-w64

我正在尝试在MinGW64中打印std :: max_align_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

如果我删除&#39; l&#39;从printf我回到同样的错误?我该如何解决这个问题。

2 个答案:

答案 0 :(得分:1)

由于您使用的是C ++,因此可以使用

#include <iostream>
#include <cstddef>

int main()
{
    std::cout << alignof(std::max_align_t) << '\n';
}

答案 1 :(得分:1)

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

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

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

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

根据man printfstd::size_t的格式为"%zu"