gpt4 book ai didi

c++ - Visual Studio 2003 编译器行为

转载 作者:行者123 更新时间:2023-11-28 07:50:32 25 4
gpt4 key购买 nike

我最近接手了一个用 C 和 C++ 编写的项目,该项目将使用 MS Visual Studio 2003 编译器进行编译。由于我在编译器设置和编译器输出方面缺乏经验,所以我想知道给定的设置是否真的有所不同(根据编译输出或性能)。

该项目混合使用了 C 和 C++。主要部分是用 C 编写的,但使用了一些用 C++ 编写的类。因此,问题的第一部分是:(MS VS 2003) 编译器是否对每个文件产生影响(仅使用 c 功能为 .cpp 文件编译纯 c,并为使用类的文件编译 c++ 样式)?是否有使用它的理由(性能提升、向后兼容性)?

该项目也不使用 try-catch block (因为它不是普通的 C)。但是编译器设置中的异常处理选项并没有被禁用。所以问题的第二部分:不使用 try-catch 但不在编译器中禁用它是否仍然可以提高性能(或任何其他逻辑原因)?

是的,我对这个设置很困惑,并试图理解。

最佳答案

很难解码,我会试一试。默认行为是在源代码文件扩展名以 .c 结尾时获取 C 编译器,在以 .cpp 结尾时获取 C++ 编译器。这背后没有更好的方案,或者与向后兼容性或性能改进有关的任何事情,一个 .cpp 文件只需要包含 C++ 代码。两个编译器使用相同的后端(代码生成器和优化器),因此如果您使用 C++ 编译器编译 C 代码,则不会有太大差异。

/EH 编译选项仅在您在代码中创建 C++ 对象并且编译器可以判断可能抛出异常时才执行某些操作。如果代码库主要是基于 C 的,那么它不会有任何区别。/EH 的实际成本非常低,几个 cpu 周期来注册一个异常过滤器。当异常处理使用函数表时没有成本,但您的函数表几乎肯定太旧而无法支持它(/SAFESEH 或 x64 代码)。

如果您刚刚接手一个大型项目,那么修改编译器设置应该是次要的。在开始更改可能会破坏代码的选项之前,请先了解代码库,这会给您调试问题带来困难。或者换句话说,避免寻找会让你看起来像是在很短的时间内取得了巨大成就的 Deus Ex Machina。使用探查器会让您获得更大的成功和更好的洞察力。

关于c++ - Visual Studio 2003 编译器行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13893032/

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