【发布时间】:2014-05-18 02:53:07
【问题描述】:
我正在尝试使用标准 IO 函数 scanf 从控制台获取 long long。我从%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
【问题讨论】:
-
尝试使用
-std=gnu99之类的东西,而不是 c99。 -
如果
rule改为int64_t,请尝试scanf("%" SCNd64, &rule);确保包括inttypes.h和stdint.h。 See this 了解更多信息。 C99 应该支持它。 -
我删除了我发布的一个答案;你正在做的事情在 Linux 上使用相同的 gcc 选项对我来说符合并执行得很好,所以我认为这与 MingW 有关。
-
您的实现不符合 C99。您确定在生成第一条错误消息时传递了
-std=c99? -
-std=gnu99产生相同的错误。