码:
#include <stdio.h>
#include <stdint.h>
int main(int argc, char *argv[]) {
printf("%lu\n%lu\n%lu\n%lu\n%lu\n%lu\n%lu\n",
UINT32_MAX,
UINT32_MAX,
UINT32_MAX,
UINT32_MAX,
UINT32_MAX,
UINT32_MAX,
UINT32_MAX);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出:
4294967295
4294967295
4294967295
4294967295
4294967295
18446744073709551615
18446744073709551615
Run Code Online (Sandbox Code Playgroud)
bug还是故意的?为什么?我认为它说明了一切,但接口需要我添加更多的行才能发布它(为了更少的文本来解决很多代码)
Die*_*Epp 14
你正在使用%lu,这是不正确的.该%lu说明符是unsigned long和只 unsigned long,没有uint32_t.这就是输出不正确的原因.请PRIu32改用.
如果您在启用警告的情况下进行编译,则编译器应该已经为您捕获了此错误.
#include <stdio.h>
#include <stdint.h>
#include <inttypes.h> // defines PRIu32
printf(
"%" PRIu32 "\n"
"%" PRIu32 "\n"
"%" PRIu32 "\n"
"%" PRIu32 "\n"
"%" PRIu32 "\n"
"%" PRIu32 "\n"
"%" PRIu32 "\n",
UINT32_MAX,
UINT32_MAX,
UINT32_MAX,
UINT32_MAX,
UINT32_MAX,
UINT32_MAX,
UINT32_MAX);
Run Code Online (Sandbox Code Playgroud)
在实践中,在大多数系统中PRIu32定义"u".