为什么下面的程序给予一个错误?
#include <stdio.h>
int main()
{
unsigned int64_t i = 12;
printf("%lld\n", i);
return 0;
}
字符串
错误:
In function 'main':
5:19: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'i'
unsigned int64_t i = 12;
^
5:19: error: 'i' undeclared (first use in this function)
5:19: note: each undeclared identifier is reported only once for each function it appears in
型
但是,如果我删除了unsigned关键字,它就可以正常工作了。那么,为什么unsigned int64_t i
给予我一个错误?
4条答案
按热度按时间disbfnqx1#
不能在类型
int64_t
上应用unsigned
修饰符。它仅适用于char
、short
、int
、long
和long long
。您可能希望使用
uint64_t
,它是int64_t
的无符号对应项。还要注意的是,
int64_t
等是在头文件stdint.h
中定义的,如果你想使用这些类型,你应该包括它。qrjkbowd2#
int64_t
不是某种内置类型。尝试添加#include <stdint.h>
来定义此类类型;然后使用uint64_t
,这意味着您似乎想要什么。kxxlusnw3#
int64_t
是一个 * typedef名称 *。N1570 § 7.20.1.1 p1:typedef名称int * N *_t指定一个宽度为 * N *、没有填充位和二进制补码表示的有符号整数类型。因此,int8_t表示这样一个宽度正好为8位的有符号整数类型。
标准在§ 6.7.2 p2中列出了哪些组合是法律的:
...
与问题无关的类型已从列表中删除。
请注意,typedef name不能与
unsigned
混用。要使用无符号64位类型,您需要:
uint64_t
(注意前面的u
)而不使用unsigned
说明符。字符串
stdint.h
(或inttypes.h
),其中定义了uint64_t
。uint64_t
,您需要包含inttypes.h
并使用PRIu64
:型
你也可以或者强制转换为
unsigned long long
,它是64位或更高的。但是,在没有严格必要的情况下,最好避免强制转换,所以你应该首选PRIu64
方法。型
n3h0vuf24#
typedef
的int64_t
类似于:字符串
所以,
unsigned int64_t i;
变成了这样:型
这显然是一个编译器错误。
因此,使用
int64_t
代替unsigned int64_t
。另外,在程序中添加
#include <stdint.h>
头文件。