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