我正试图long long从控制台使用标准IO功能scanf.我开始时%lld:
scanf("%lld", &rule);
Run Code Online (Sandbox Code Playgroud)
抛出:
error: unknown conversion type character 'l' in format [-Werror=format=]
Run Code Online (Sandbox Code Playgroud)
我发现了更多变通方法,但它们也会抛出错误:
scanf("%I64d", &rule);
->error: ISO C does not support the 'I64' ms_scanf length modifier [-Werror=format=]
scanf("%"SCNd64"", &rule);
->error: expected ')' before 'SCNd64'
Run Code Online (Sandbox Code Playgroud)
难道我做错了什么?还有另外一招吗?
我正在使用这些标志编译最新版本的MinGw GCC: -pedantic -Wall -Werror -std=c99 -g -D HOME=1
也只是想添加这个片段:
MinGW-w64 - 适用于 32 位和 64 位 Windows / [Mingw-w64-public] -Wformat 和 %llu
问题是所有 msvcrt-DLL 版本都不支持格式化程序宽度说明符 %ll,因此 gcc 警告它的使用。以向后兼容的方式在格式化程序中为 msvcrt 指定 64 位整数标量宽度的变体是使用 %I64。
在 Windows 上使用 %I64u,或者只使用 inttypes.h PRIuMAX。
如果必须使用 %llu,请在包含 stdio.h 之前定义 __USE_MINGW_ANSI_STDIO 宏。请注意,如果您这样做,MS 类型 %I64* 格式将不再有效。
对于SCNd64和类似的,你必须使用
#include <inttypes.h>
Run Code Online (Sandbox Code Playgroud)
但是,只有在您的编译器支持C99的情况下,所有这些操作才应该起作用。您的第一个错误消息是一个强烈的信号,表明没有,或者没有提供正确的命令行开关。