Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/159.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;:32位到64位的迁移_C++_Macos_64 Bit - Fatal编程技术网

C++ C++;:32位到64位的迁移

C++ C++;:32位到64位的迁移,c++,macos,64-bit,C++,Macos,64 Bit,我正在进行一个项目,将32位C++代码迁移到MacOSX上的32位和64位模式。我对某些事情感到困惑。例如,考虑下面的代码行-< /P> long* buffer = new long[VAL]; long var = buffer[0]; 现在,我知道sizeof(long)将以32位返回4,以64位返回8。因此,我不知道应该用什么来代替上述两行,以便这些行在32位和64位模式下都能正常工作 这听起来可能是一个微不足道的问题,但我只是无法在我正在从事的项目中大量存在的此类问题上取得任何进展

我正在进行一个项目,将32位
C++
代码迁移到
MacOSX
上的32位和64位模式。我对某些事情感到困惑。例如,考虑下面的代码行-< /P>
long* buffer = new long[VAL];
long var = buffer[0];
现在,我知道
sizeof(long)
将以32位返回
4
,以64位返回
8
。因此,我不知道应该用什么来代替上述两行,以便这些行在32位和64位模式下都能正常工作

这听起来可能是一个微不足道的问题,但我只是无法在我正在从事的项目中大量存在的此类问题上取得任何进展

一般来说,我不知道应该用什么来替换上述两行,以便这些行在32位和64位模式下都能正常工作

答案取决于“正确工作”的含义

如果您希望使用具有特定大小的整数(即所有平台上的32位或所有平台上的64位),请使用
中的定义:
int32\u t
用于32位,
int64\u t
用于64位。无论平台如何,这都将确保精确的尺寸


如果您所需要的只是您自己的程序内的互操作性,那么您可以让一切保持原样:在使用最短
long
的平台上没有溢出的情况下,程序将在使用较长
long
的平台上执行相同的操作,除了需要更多的内存之外。

为什么需要更换?这些行有什么问题?依赖于
var
的变量将在32位和64位模式下返回不同的值,代码将变得不一致。我认为这是一件好事。这将随系统扩展。您能给出一个程序(实际编译;什么是
新缓冲区[VAL]
?)来说明差异吗?分配n
long
s和读/写它们中的任何一个都应该表现相同,而不管
long
的大小,当然是模溢出。可移植性问题只有在你做一些愚蠢的事情时才会出现,比如向
long
抛出指针,或者用类型双关语将
long
解释为
float
或诸如此类。既然你在那里,为什么不从正确的类型开始呢?也就是说,你为什么试图将一个
缓冲区*
(实际上是一个
无效*
)转换成一个完全不相关的类型,
长*
?你能解释一下“你自己的程序内的互操作性”是什么意思吗?@Sankalp我指的是类似于你在文章中所写的代码,即在相同类型的位置之间传输,例如
var
buffer[0]
这两种类型都是
long