std::max_align_t 无法打印其值
std::max_align_t unable to print its value
我正在尝试在 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
如果我从 printf 中删除 'l',我会回到同样的错误吗?我该如何解决这个问题。
由于您使用的是 C++,因此可以使用此
#include <iostream>
#include <cstddef>
int main()
{
std::cout << alignof(std::max_align_t) << '\n';
}
你正在编写 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
's format is "%zu"
。
我正在尝试在 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
如果我从 printf 中删除 'l',我会回到同样的错误吗?我该如何解决这个问题。
由于您使用的是 C++,因此可以使用此
#include <iostream>
#include <cstddef>
int main()
{
std::cout << alignof(std::max_align_t) << '\n';
}
你正在编写 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
's format is "%zu"
。