Visual Studio配置(5):项目属性页-C/C++(1)
常规:
其他#using指令:指定一些#using指令
调试信息格式:
无 不产生任何调试信息,因此编译较快
程序数据库(/Zi):产生并包含用于调试器的类型信息和符号调试信息的程序数据库(PDB)。不影响优化,暗示了debug。信息放在pdb文件而不是obj文件。
C7兼容(/Z7):生成包含用于调试器的完整符号调试信息的.obj文件。符号调试信息包括变量的名称和类型以及函数和行号。不会生成.pdb文件。
用于编辑并继续的程序数据库(/Zi):改了之后还可以继续调试,很多优化与这个并不兼容。公共语言运行时支持:使用.NET运行时服务。
使用Windows运行时扩展:
取消显示使用版权标志:取消显示登录版权标志,不知道是哪里的版权
警告等级
关 : 关闭所有警告(/W0) : 关闭所有警告消息的显示。
1 级(/W1) : 显示严重的警告消息。
2 级(/W2) : 显示等级 1 警告以及某些不太严重的警告,如关于隐藏类成员的警告。这是命令行中的默认警告等级。
3 级(/W3) : 显示等级 2 警告以及某些不太严重的警告,如有关总是计算为真或假的表达式的警告。
4 级(/W4) : 显示所有等级 3 警告以及信息性警告。
--将警告视为错误:一般不需要这么严格
SDL检查:sdl(安全开发生命周期),这个东西在2012版推出的,为了更好监管开发者代码安全,会严格按照SDL的规则编译代码,会有一些以前常用的函数无法通过编译。
多处理器编译:针对多核使用的
====================================================
优化:
/O 选项控制有助于创建具有最高速度或最小大小的代码的各种优化。
/O1 为获得最小大小而优化代码。
/O2 为获得最高速度而优化代码。
/Ob 控制内联函数展开。
/Od 禁用优化,从而加快编译并简化调试。
/Og 启用全局优化。
/Oi 为适当的函数调用生成内部函数。
/Os 通知编译器优选大小优化而非速度优化。
/Ot(默认设置)通知编译器优选速度优化而非大小优化。
/Ox 选择完全优化。
/Oy 取消在调用堆栈上创建框架指针,以更快地进行函数调用。
内联函数扩展:选择生成的内联函数扩展级别
/Ob0 禁用内联扩展。默认情况下,扩展由编译器自行对所有函数进行(通常称为自动内联)。
/Ob1 仅允许对标记为 inline、__inline 或 __forceinline 的函数或是在类声明中定义的 C++ 成员函数中进行扩展。
/Ob2 默认值。允许对标记为 inline、__inline 或 __forceinline 的函数或是编译器选择的任何其他函数进行扩展。
启用内部函数:用有助于应用程序更快运行的内部函数或其他特殊形式的函数替换某些函数调用。
使用内部函数的程序比较快,因为它们没有函数调用系统开销。但是,由于创建了附加代码,它们可能比较大
优化大小和速度
/Os(代码大小优先)通过指示编译器优选大小而非速度来最小化 EXE 和 DLL 的大小。 编译器可以将许多 C 和 C++ 构造缩小为功能类似的机器码序列。 这些差异有时在大小和速度之间提供了折中。 /Os 和 /Ot 选项允许在二者之间指定一个首选项:
/Ot(代码速度优先)通过指示编译器优选速度而非大小来最大化 EXE 和 DLL 的速度。(这是默认设置。)编译器可以将许多 C 和 C++ 构造缩小为功能类似的机器码序列。 这些差异有时在大小和速度之间提供了折衷。 “最大化速度”(/O2) 选项隐含 /Ot 选项。 /O2 选项组合若干个选项以产生速度非常快的代码。
如果使用 /Os 或 /Ot,还必须指定 /Og 以优化代码。
省略帧指针:
此选项可以加快函数调用的速度,因为无需设置和移除任何框架指针。它还可以使一个或多个寄存器(Intel 386 或更高版本上的 EBP)空闲出来,以便存储频繁使用的变量和子表达式。
/Oy 启用框架指针省略,而 /Oy- 禁止省略。 /Oy 仅在 x86 编译器中可用。
如果代码需要基于 EBP 进行寻址,可以在 /Ox 选项后指定 /Oy– 选项,或使用带“y”和 off 参数的 optimize,以便通过基于 EBP 的寻址获得最大程度的优化。 编译器可检测大部分需要基于 EBP 的寻址的情况(例如,使用 _alloca 和 setjmp 函数以及使用结构化异常处理的情况)。
启用纤程安全优化:
通过线程本地存储区 (TLS) 数组引用用 __declspec(thread) 声明的数据。 TLS 数组是系统为每个线程维护的地址数组。 此数组中的每个地址提供线程本地存储区数据的位置。
纤程是轻量对象,由堆栈和寄存器上下文组成,并可安排在各种线程上。 纤程可以在任意线程上运行。 因为纤程可能会交换出去并且稍后在不同的线程上重新启动,所以 TLS 数组的地址不得缓存或优化为函数调用中的公共子表达式(有关详细信息,请参见 /Og(全局优化) 选项)。 /GT 阻止此类优化。
全程序优化:
全程序优化允许编译器用有关程序中所有模块的信息执行优化。 如果不执行全程序优化,则基于每个模块 (compiland) 执行优化。
默认情况下,权全程序优化是关闭的,因此必须显式地启用它。 但是,也可以用 /GL- 显式地禁用它。
使用有关所有模块的信息,编译器能够:
跨越函数边界优化寄存器的使用。
更好地跟踪对全局数据的修改,允许减少加载和存储的数目。
更好地跟踪可能由取消指针引用所修改的项组,减少加载和存储的数目。
在模块中内联某个函数,即使该函数在另一个模块中定义。
=====================================================================================
预处理器:一些宏定义的相关操作
预处理器定义:定义了一些宏
取消预处理器定义:估计填了就单个取消掉,为了方便调试代码
取消所有预处理器定义:取消了之前定义的所有宏
忽略标准包含路径:禁止编译器在INCLUDE环境变量指定的目录中搜索包含文件。
预处理到文件:预处理C和C++源文件并将预处理的输出写入到文件。此选项将取消编译,因此不会生成obj文件。
预处理取消显示行号:预处理时不使用#line指令。
保留注释:从源代码取消注释条,要求设置“预处理”选项之一
=====================================================================================