【发布时间】:2016-03-22 14:36:46
【问题描述】:
我正在将我的代码从 Windows 迁移到 Linux。 Linux上没有名为“__int64”的类型,所以我尝试用别名自己定义它。我的代码如下:
#include <cstdint>
#if !defined(__int64)
typedef int64_t __int64;
#endif
int main(int argc, char** argv)
{
unsigned __int64 ii64 = 0; // Error
return 0;
};
当我编译它时,我得到了以下错误:
main.cpp: 在函数'int main(int, char**)': main.cpp:10:20: 错误: 'ii64' 之前的预期初始化程序
我知道可以将“unsigned __int64”替换成“uint64_t”或者定义一个新的类型,但是为什么前面的代码不能编译?
【问题讨论】:
-
unsigned这个词不是限定词。 (unsigned int类型不是添加了unsigned的int类型,它是一个完全独立的类型。)您总是可以使用宏来代替。 -
您认为 typedef 是一个具有关联替换规则的宏,但不是这样。
-
是的,你是对的,但“定义”也不起作用。
-
如果它奏效了,我决定我真的很喜欢我的
LargeInteger课程,而是写了typedef int64_t LargeInteger,你希望发生什么? -
此外,
int64_t无论如何都不是unsigned可以“限定”的类型