zoukankan      html  css  js  c++  java
  • vc++ win32项目属性介绍(二、c/c++)

    常规-附加包含目录这个很常用的了.如果自己以前写过一些库,可以重用,那么就把那个库所在的位置放进来。然后在工程里#include就可以了。
    但这个库所放的位置最好能规范一些。比如放到工程目录上一级,并命名为src、lib这样的。在附加包含目录里,用相对地址和vs内置的宏来描述。切忌绝对路径、切忌放到不同的本地磁盘上。
    常规-调试信息格式
    说一下/ZI和/Zi
    如果允许的情况下,或者在编译成发布版本前,能用ZI就用ZI。但ZI会阻止编译器的一些优化。
    发布版本使用/Zi,编译器会进行一些优化。
    /ZI和/Zi有啥区别?
    在用Zi时,命中一个断点后:
    1.png 

    这时编辑代码,增加一行语句,并继续执行:
    2.png 



    新增加的代码并不能直接运行,程序仍然按照旧代码执行。
    如果改为/ZI后:
    3.png 


    同样增加一行代码,并继续执行:
    4.png 


    程序就按照新代码执行了。这有点类似于java的热替换,不过vc又重新编译了一遍代码。
    调试程序时,这个功能很好用的。
    常规-警告等级
    分为五个等级。一般应用层的程序,W3就差不多够了。如果是内核程序,这个就要求比较高了。
    常规-将警告视为错误
    有警告出现时当做错误处理。使用这个选项来严格要求自己是个好习惯,但我是受不了....内核开发这个是默认打开的。


    5.png 

    因为没有使用i的警告,导致编译错误。
    另外,如果开启这个选项,比如用strcpy什么的,也会报错,编译器会推荐用strcpy_s这类的安全函数。

    优化-优化
    这个选项是和调试信息格式选项有关的。/ZI和优化冲突。
    不同的优化规则会导致编译出来的文件大小有变化。
    貌似release和debug编译出来文件大小的主要区别就是在这里。

    优化-内联函数展开
    如果启用优化时,会把内联函数展开。包括自己定义的内联、头文件中声明的函数、和编译器认为可以作为内联的。
    不过不是我们定义一个inline函数,编译器就一定当成inline处理的。内联函数里不能有循环、不能超过20行(不知道这个数字记错没)。

    预处理器-预处理器定义
    在这里定义一些和系统相关的宏。在调用编译器进行编译之前执行。
    http://www.cnblogs.com/whiteyun/archive/2011/07/07/2099918.html
    这里有详细的预处理指令。

    语言-OpenMP支持
    多核编程支持。打开OMP支持后,一个简单的程序:

    7.jpg 


    将for循环拆分成了多个任务。
    适当的使用多核编程可以提高程序执行效率,但一定要注意数据保护和同步。

    代码生成-基本运行时检查
    检查堆栈和未初始化的变量。常规程序当然推荐全开,但有些比较特殊的程序,比如栈溢出测试,就要关掉堆栈检查了。

    代码生成-运行库
    在第一篇文章里介绍常规-MFC的使用时,提到过这个。
    MD是使用动态库、MT是使用静态库。是VC API和CRT的库,不是MFC。
    如果使用MD编译的程序,在另一个系统里不能运行。使用Depends查看发现有函数未知。那么就是动态编译的问题了。改成MT或者能成功。
    选项后面带d的是debug版本,不带d的是release版本。debug版本会链接有调试信息的库。

    预编译头
    大工程里,使用预编译头会加快编译。多线程编译是很爽很快的。

    高级-调用约定
    网上关于_cdecl/_stdcall/_fastcall/_thiscall这些的解释很多,就不说了。这个就是控制默认函数声明时,采用何种调用约定生成的。
    调用约定主要是对于函数名称、堆栈平衡维护位置、使用寄存器优化等起作用的。
    写dll时比较在乎这个,不过一般都是放到模块定义文件里的。

    高级-编译为
    使用c编译器还是c++编译器。如果工程源文件是.c会自动使用c编译器,.cpp会使用c++编译器。
    另外,再百度查查extern C吧。
    c++编译器编译函数时,除了遵循调用约定外,还会在函数后面加些编码。

    命令行
    就是所有在使用的编译选项。

  • 相关阅读:
    HDU 5213 分块 容斥
    HDU 2298 三分
    HDU 5144 三分
    HDU 5145 分块 莫队
    HDU 3938 并查集
    HDU 3926 并查集 图同构简单判断 STL
    POJ 2431 优先队列
    HDU 1811 拓扑排序 并查集
    HDU 2685 GCD推导
    HDU 4496 并查集 逆向思维
  • 原文地址:https://www.cnblogs.com/raymon/p/2829986.html
Copyright © 2011-2022 走看看