c++ - 与 32 位和 64 位应用程序相同源的条件编译

标签 c++ windows 32bit-64bit conditional-compilation

<分区>

我们有一个 32 位 Windows 应用程序,它使用 C++ 和良好的旧 Windows 应用程序模型。技术上是否可以通过转动编译器开关或使用一些宏来拥有单一源并将其编译为 32 位和 64 位?

目前我认为代码不会编译为 64 位应用程序,我必须修复编译错误,一般来说我应该如何进行才能编译为 64 位和 32 位应用程序。我应该记住什么?会有哪些挑战?任何意见和提示将不胜感激。 谢谢

最佳答案

关于“我应该记住什么?会有哪些挑战?”这些是我在将代码从 32 位移植到 64 位时遇到的最常见问题:

  • 假设指针是 4 字节
  • 假设 sizeof(int) == sizeof(pointer)
  • 假设 sizeof(int) == sizeof(size_t)
  • 内联/硬编码 x86 程序集

确保在编译时使用最严格的警告级别(Microsoft 编译器上的 /W4 或 gcc 上的 -Wall -Wextra -pedantic-errors)以帮助捕获转换从较大的类型到较小的类型。

这是微软的 guide用于移植,但也适用于其他编译器。

关于c++ - 与 32 位和 64 位应用程序相同源的条件编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18746550/

相关文章:

c++ - C++ 中求和程序的问题

c++ - 用什么替代 Windows 端口上的 glob_t 和 glob()?

windows - 如何分析Windows 7 bsod error minidump?

c - 将 32 位 C 源代码移植到 64 位

windows - 我在哪里可以获得与 Windows Server 兼容的 32 位版本的 IESHIMS.dll 和 GPSVC.dll?

C++ lambda 在捕获变量时具有不同的类型

c++ - wxWidgets - 如何嵌入 .ico 和 .png 图像并用于绘制工具栏项目

c++ - AVL树中节点的平衡因子

windows - 在 Haxe 中创建透明窗口(Neko 或 Windows 目标)

为 32 位系统编译的 C# 程序和 C++ DLL 在 64 位系统上崩溃