我希望自己的长度为8个字节,而不管我是以32位模式还是64位模式编译。我正在使用MSVC,在这一点上我不太在意跨平台性。我试图做这样的事情如何在任何拱门上强制长度为8字节的大小?
#define long __int64
或
typedef __int64 long;
但第一个结果在其他文件中,第二个大规模的编译错误似乎是由编译器本身是不能接受的。
我希望自己的长度为8个字节,而不管我是以32位模式还是64位模式编译。我正在使用MSVC,在这一点上我不太在意跨平台性。我试图做这样的事情如何在任何拱门上强制长度为8字节的大小?
#define long __int64
或
typedef __int64 long;
但第一个结果在其他文件中,第二个大规模的编译错误似乎是由编译器本身是不能接受的。
我不会改变保留类型的默认行为。一个更好的做法是创建一个新的类型,如果你喜欢和使用它。
想起的情况下,当你包括thirdPartyLib和它的“h”文件中有这样的事情:
void func1(long number);
当你的代码中包含了“H”文件,它会看到“数量”参数设置为64位但是当lib的原始“c”文件包括“h”时,它可以认为“数字”是32位。这会在联动阶段造成问题。
我所有的代码都被锁定在一个特定的命名空间中,如果我只能在该命名空间内将“长”作为“64位整数”工作,也许我可以避免你提到的问题? – 2013-02-24 12:24:00
这可能是一种可能性,但我仍然相信一个好的做法是创建一个新类型“myLong”,“myInt64”或任何64位。这对于谁读取你的代码的人来说也不那么令人困惑。 – 2013-02-24 12:40:13
或者更好的是,只需使用总是64位的long long。 – 2013-02-24 12:42:20
这是不可能的。如果你关心位大小,那么你应该包含stdint.h并使用int64_t。今天使用'long long'作品,但从现在起十年后可能无法使用。 – 2013-02-24 13:58:25