繁体   English   中英

Visual Studio 2003编译器行为

[英]Visual Studio 2003 Compiler behaviour

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

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

该项目也不使用try-catch块(因为它不是纯C语言)。 但是不会禁用编译器设置中的异常处理选项。 所以问题的第二部分:不使用try-catch但不在编译器中禁用它,是否还会有性能提升(或任何其他逻辑原因)?

是的,我对这种设置和尝试理解感到困惑。

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

/ EH编译选项仅在您在代码中创建C ++对象并且编译器可以告诉您可能抛出异常时才起作用。 如果代码库主要基于C,则不会有任何区别。 / EH的实际成本非常低,只需几个cpu周期即可注册异常过滤器。 当异常处理使用函数表时没有任何花费,但是您的表肯定已经太老了,无法支持它(/ SAFESEH或x64代码)。

如果您只是接手了一个大型项目,那么修改编译器设置应该是一个低优先级。 在开始更改可能会破坏代码的选项并让您很难调试问题之前,请先了解代码库。 或者换一种说法,避免寻找Deus Ex Machina,它将使您看起来在很短的时间内就取得了巨大的成就。 使用探查器可以使您获得更多的收获,并获得更深入的了解。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM