正如我在许多问题中解释的那样,我正在尝试将软件从32位系统转移到64位系统。 我有some problem with malloc() function,但现在我通过更正参数来解决它。
在我的代码中,如果我在32位系统上运行,我可以使用:
(int **)malloc(const * sizeof(int))
但是,在64位系统上,我必须使用:
(int **)malloc(const * sizeof(int64_t))
我想用 if()条件管理这些十字路口,所以我需要一个行为方式的布尔isIt64system()函数:
if(isIt64system())然后 [64位代码]
else [32位代码]
这个函数是否存在于C ++中? 是否有任何功能告诉我软件是在32位系统还是64位系统上运行?
答案 0 :(得分:5)
不要编写两个与大小相关的分支,而只需编写一个正确的可移植代码路径。在你的情况下:
(int**)malloc(count*sizeof(int*));
无论系统上int*
的大小是多少,这都能正常工作。
<小时/> 后记:从你对这个问题的字面答案中可以看出,你最好没有if:
if(sizeof(int*) == sizeof(int))
x = (int**)malloc(count*sizeof(int));
else if (sizeof(int*) == sizeof(int64_t))
x = (int**)malloc(count*sizeof(int64_t));
希望你能看到代码是多么荒谬,以及如何用一个构造良好的malloc
调用代替它。
答案 1 :(得分:1)
您的编译器将具有预处理器定义,可以让您检查32位或64位。
答案 2 :(得分:0)
最好的方法是使用类似的东西
#ifdef __LP64__
<64bit code>
#else
<32bit code>
#endif
但如果你真的需要一个功能,那么这应该有用。
bool is64bit() {
if (sizeof(int*) == 4) {
return false;
}
return true;
}