【问题标题】:Telling if C++ code is portable [duplicate]判断 C++ 代码是否可移植 [重复]
【发布时间】:2023-04-02 01:47:01
【问题描述】:

我正在尝试编写可以用任何现代版本的 g++ 编译的代码,但遇到了困难。我使用 Visual Studios 编写了代码,它运行良好,但我尝试在另一台计算机上编译它,但出现了问题。

一个问题是它无法识别宏EXIT_SUCCESS。我看到here 它是在cstdlib 中定义的,但是我为什么不需要导入那个库呢?

还有一个 .h 文件,我有 const private int PI = 3.1416,而在另一台计算机上它不喜欢这样。

那么你怎么知道什么是可移植的?我认为 C(因此本质上是 C++)是为了在任何地方编译而发明的。我问了this 的问题,但认为它被误解了,是否必须对 IDE 进行某些设置以确保可移植性?

编辑:我可能会更好地了解为什么代码在没有include <cstdlib> 的情况下在 Visual Studio 中编译以及如何关闭此类功能?

【问题讨论】:

  • 1) 了解 C 和 C++ 之间的区别。 2)学习整数和浮点数的区别。 3)学习C和C++。 4) 编写正确的、符合标准的代码。那么就可移植性而言,您将有一个很好的开端。
  • @KerrekSB -1 答案毫无价值...学习 C 和 C++
  • @Celeritas c++ standards 很好地定义了什么是便携的,什么不是!
  • @Celeritas 你搜索in a good reference 它会告诉你。一段时间后您会了解这些内容,但标准库中有很多名称(以及下一个标准中的新名称),因此值得参考以方便检查这些内容。
  • @Celeritas: 我不知道你为什么说@KerrekSB 说的没有价值,你知道EXIT_SUCCESSstdlib.h 下的C11 standard §7.22/3 says 并且你说学C 没用吗.学习一门语言不仅仅意味着它的语法,它的意义远不止于此。

标签: c++ visual-studio cross-platform portability


【解决方案1】:

实际上,判断代码是否可移植的唯一方法是在所有目标编译器/平台下编译它。您可以尝试遵守 C++ 标准,但现实很残酷,并且没有 100% 兼容的编译器。即使是简单的程序也能在其他编译器上给你惊喜。

【讨论】:

  • +1,但它不仅仅是 100% 兼容......可移植性还涉及刻意避免依赖发生在“工作”中的未定义、未指定和实现定义的行为(足够好)在一个系统上,但可能不在另一个系统上......
  • 对于这种特定情况(使用MS编译器作为主要编译器)MinGW是检查可移植性的好工具
猜你喜欢
  • 2017-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-10
  • 2016-11-02
  • 2015-10-21
  • 2013-06-04
  • 1970-01-01
相关资源
最近更新 更多