我目前正致力于将32位应用程序转换为C语言中的64位应用程序.此应用程序目前正在开发x86架构(Windows,osx,Unix,Linux).因此,在开始编码之前,我想知道在转换应用程序时我需要考虑什么.
geo*_*car 27
LONG不是long.(int)&x管型和打字intptr_t和(unsigned int)&x使用uintptr_tchar*用它来做指针算术.4 = sizeof(void*)#ifdef RUN64或类似的东西.如果128位平台变得流行,你会后悔的.编辑添加了uintptr_t注释建议的注释.
尚未提到的一个潜在问题是,如果您的应用程序从磁盘读取或写入二进制数据(例如,使用读取结构数组fread),您将不得不非常仔细地检查并且可能最终有两个读取器:一个用于遗留文件和一个64位文件.或者,如果你小心使用类型,如uint32_t从等<stdint.h>头文件,你可以重新定义你的结构是位对位兼容.无论如何,二进制I/O是值得注意的.
如果您为您的值使用了正确的类型 - 例如。size_t, ptrdiff_t, uintptr_t,stdint.h适当的固定大小的 int 类型- 并且没有对值大小进行硬编码,您的代码应该开箱即用。
这实际上取决于应用程序及其编码方式.有些代码可以用64位编译器重新编译,它只会工作,但通常只有在代码设计时考虑了可移植性时才会发生这种情况.
如果代码有很多关于本机类型和指针大小的假设,如果它有很多位打包或使用字节指定的协议与外部进程对话但是使用一些关于本机类型大小的假设那么可能需要一些或大量的工作才能获得干净的编译.
几乎每个演员和编译器警告都是需要签出的红旗.如果代码不是"警告干净",那么这也表明可能需要做很多工作.
| 归档时间: |
|
| 查看次数: |
36778 次 |
| 最近记录: |