gpt4 book ai didi

c++ - 编译 C++ 代码使其在 Windows 和 Linux 中表现相同

转载 作者:太空宇宙 更新时间:2023-11-04 05:40:37 28 4
gpt4 key购买 nike

我已经安装了 cygwin 并使用它在 Windows 上进行 C++ 编程。

我更喜欢在 Windows 中编写代码(这些是作业),但代码也需要能够在 Linux 上运行。虽然代码在大多数情况下移植得很好,但似乎有些东西在 Windows 上可以工作,但在 Linux 上会导致段错误(例如引用未初始化的变量和指针)。

我在Windows(通过C:\cygwin\bin\g++.exe)和Linux中使用g++进行编译,我不明白为什么在前者中工作的代码在后者中失败(或者为什么它们的行为不一样)。如何让我的代码在两者中表现完全相同?这可能吗?

虽然我是一个 C++ 菜鸟,但我没有使用任何 Windows 特定的库,所以我可能会误解一些简单/重要的东西。最后我知道使用未初始化的变量和指针是不好的 - 我希望它们的使用会导致 Windows 中的段错误。

最佳答案

您所描述的“引用未初始化的变量和指针”称为未定义行为。这意味着“你的运气可能会有所不同” - 它可能在一个系统上以一种方式执行某些操作,而在另一个系统上以其他方式执行某些操作。不幸的是,作为“C 和 C++ 应该是高效语言”的一部分,未定义行为的行为就是这样 - 编译器不需要关心它,并且 C 或 C++ 标准中没有任何内容定义应该发生的情况。

如果您将 -Wall 应用到编译器,它应该会针对几乎所有类型的未初始化变量发出警告。

将规则定为:每当声明变量时,也为其赋值。这样做从来都不是一个坏主意。即使它只是为其分配了一些无用的值,也比试图确定为什么您的计算在四层嵌套循环深处的某个地方出错要好。

您还可以尝试使用 Microsoft Visual Studio 工具 - 这些工具有免费的“Express Edition”。如果使用 Debug模式进行编译,它将生成额外的代码来(尝试)检测未初始化变量的使用。

我不知道有哪个“库”允许您对未初始化的变量进行故障处理。

关于c++ - 编译 C++ 代码使其在 Windows 和 Linux 中表现相同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15743988/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com