2013-02-24 57 views
0

我希望自己的长度为8个字节,而不管我是以32位模式还是64位模式编译。我正在使用MSVC,在这一点上我不太在意跨平台性。我试图做这样的事情如何在任何拱门上强制长度为8字节的大小?

#define long __int64 

typedef __int64 long; 

但第一个结果在其他文件中,第二个大规模的编译错误似乎是由编译器本身是不能接受的。

+0

这是不可能的。如果你关心位大小,那么你应该包含stdint.h并使用int64_t。今天使用'long long'作品,但从现在起十年后可能无法使用。 – 2013-02-24 13:58:25

回答

0

我不会改变保留类型的默认行为。一个更好的做法是创建一个新的类型,如果你喜欢和使用它。

想起的情况下,当你包括thirdPartyLib和它的“h”文件中有这样的事情:

void func1(long number); 

当你的代码中包含了“H”文件,它会看到“数量”参数设置为64位但是当lib的原始“c”文件包括“h”时,它可以认为“数字”是32位。这会在联动阶段造成问题。

+0

我所有的代码都被锁定在一个特定的命名空间中,如果我只能在该命名空间内将“长”作为“64位整数”工作,也许我可以避免你提到的问题? – 2013-02-24 12:24:00

+1

这可能是一种可能性,但我仍然相信一个好的做法是创建一个新类型“myLong”,“myInt64”或任何64位。这对于谁读取你的代码的人来说也不那么令人困惑。 – 2013-02-24 12:40:13

+0

或者更好的是,只需使用总是64位的long long。 – 2013-02-24 12:42:20

相关问题