为现有的32位代码添加64位支持,难度很大吗?

psi*_*lia 6 c embedded 64-bit 32bit-64bit

我建立了一个针对不同32位平台的库.现在,必须支持64位体系结构.扩展现有32位代码以支持64位架构的最常用策略是什么?我应该使用#ifdef还是其他什么?

Pau*_*l R 16

所涉及的工作量将完全取决于原始代码的编写程度.在最好的情况下,除了重新编译之外,不会涉及任何其他工作.在最糟糕的情况下,您将不得不花费大量时间使您的代码"64位清洁".

典型的问题是:

  • 关于int/long/pointer/etc的大小的假设
  • 分配指针<=>整数
  • 依赖于默认参数或函数结果转换(即没有函数原型)
  • 不合适的printf/scanf格式说明符
  • 关于结构的大小/对齐/填充的假设(特别是关于文件或网络I/O,或与其他API的接口等)
  • 使用字节偏移量进行指针运算时不适当的强制转换

  • +1只是一些补充:整数参数的一个讨厌的例子是va_arg函数:对应于`...`的所有窄整数类型都将被提升为`int`.然后,使用该整数`typeof`s与正确的语义,如`size_t`,`uintptr_t`,`ptrdiff_t`,代码`uint64_t`通常只是编译和运行.作为循环变量滥用`int`的代码,`char`算术忘记了这可能是签名或未签名的,这样的东西正在寻找麻烦.通过所有警告在不同的编译器上运行代码,`clang`是对`gcc`的一个很好的补充 (5认同)