【发布时间】:2015-04-24 22:57:24
【问题描述】:
大家好,作为 C++ 的初级程序员,我正在研究编译器的一些差异我为 gcc 编译器(代码块)和 Visual C++(Visual Studio Express)导入了相同的源文件,我发现了一些奇怪的行为,我没想到。
Visual C++ 抛出了一堆在我看来相当大的错误......比如使用不同的迭代器迭代向量,迭代器来自向量的另一个实例,而不是使用这个迭代器完成的操作...... gcc 编译成功并且在运行时没有抛出错误......而可视化 c++ 在编译中抛出了一堆错误,然后抛出了“不同迭代器类型”的运行时错误,或者使用 new char[str.length()+ 进行动态字符分配1] 和 strcpy_s() 从字符串中插入它们 - 可视 C++ 调试器抛出损坏堆的运行时错误,而代码块调试器运行得很好。
我的问题是。这些编译器和调试器真的有这么大的区别吗?如果代码在 gcc 和代码块调试器上运行完全完美,但在 Visual Studio 中抛出错误,我是否应该担心我的编程处于糟糕的水平?
我学会了在代码块中使用 c++ 编程,visal c++ 向我展示了我完全不知道的错误..
【问题讨论】:
-
在 C++ 中,即使是一个小错误也可能在编译时崩溃为“大量错误”。修复单个字符,您就可以在更大的项目中摆脱数兆字节的错误日志。如果您的代码使用 CodeBlocks 编译得很好,您不必太担心,这只是 VisualStudio 中的错误配置。通常最好坚持使用简单且免费的编译器(如 gcc),直到您开始“感受”正在发生的事情。
-
@ddinchev:我非常不同意,其中许多是未定义的行为 - 错误 - 在他的代码中 CodeBlocks 假装很好,Visual Studio 正在检测。
-
这是未定义行为的本质,它不一定将自己表现为可观察到不良或意外行为。 VC++ 运行时在调试版本中比 g++ 做的错误检查更多。很高兴 VC++ 教会了你一些教训并记住它们——你的 g++ 构建同样被破坏,你注意到只是时间问题。
标签: c++ visual-studio-2010 visual-c++ gcc compiler-errors