Visual C 编译器常用选项配置

2008-02-23 05:32:55来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折

编译参数的配置。主要通过IDE的菜单项Project->Settings->C/C 页来完成。我们能够看到这一页的最下面Project Options中的内容,一般如下:

  /nologo /MDd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_Windows" /D "_AFXDLL" /D "_M

  BCS" /Fp"Debug/WritingDlgTest.pch" /Yu"stdafx.h" /Fo"Debug/" /Fd"Debug/" /FD /GZ /c

  各个参数代表的意义,能够参考Msdn。比如/nologo表示编译时不在输出窗口显示这些配置(我们能够把这个参数去掉来看看效果)等等。一般我们不会直接修改这些配置,而是通过这一页最上面的Category中的各项来完成。

  1) General:一些总体配置。Warning level用来控制警告信息,其中Level 1是最严重的级别;Warnings as errors将警告信息当作错误处理;Optimizations是代码优化,能够在Category的Optimizations项中进行更细的配置;Generate browse info用以生成.sbr文档,记录类、变量等符号信息,能够在Category的Listing Files项中进行更多的配置。Debug info,生成调试信息:None,不产生任何调试信息(编译比较快);Line Numbers Only,仅生成全局的和外部符号的调试信息到.OBJ文档或.EXE文档,减小目标文档的尺寸;C 7.0- Compatible,记录调试器用到的任何符号信息到.OBJ文档和.EXE文档;Program Database,创建.PDB文档记录任何调试信息;Program Database for "Edit & Continue",创建.PDB文档记录任何调试信息,并且支持调试时编辑

  2) C Language:pointer_to_member representation用来配置类定义/引用的先后关系,一般为Best-Case Always表示在引用类之前该类肯定已定义了;Enable Exception Handling,进行同步的异常处理;Enable Run-Time Type Information迫使编译器增加代码在运行时进行对象类型检查;Disable Construction Displacements,配置类构造/析构函数调用虚函数问题

  3) Code Generation:Processor表示代码指令优化,能够为80386、80486、Pentium、Pentium Pro,或Blend表示混合以上各种优化。Use run-time library用以指定程式运行时使用的运行时库(单线程或多线程,Debug版本或Release版本),有一个原则就是,一个进程不要同时使用几个版本的运行时库。Single-Threaded,静态连接LIBC.LIB库;Debug Single-Threaded,静态连接LIBCD.LIB库;Multithreaded,静态连接LIBCMT.LIB库;Debug Multithreaded,静态连接LIBCMTD.LIB库;Multithreaded DLL,动态连接MSVCRT.DLL库;Debug Multithreaded DLL,动态连接MSVCRTD.DLL库。连接了单线程库就不支持多线程调用,连接了多线程库就需要创建多线程的应用程式。

  Calling convention能够用来设定调用约定,有三种:__cdecl、__fastcall和__stdcall。各种调用约定的主要区别在于,函数调用时,函数的参数是从左到右压入堆栈还是从右到左压入堆栈;在函数返回时,由函数的调用者来清理压入堆栈的参数还是由函数本身来清理;连同在编译时对函数名进行的命名修饰(能够通过Listing Files看到各种命名修饰方式)。Struct member alignment用以指定数据结构中的成员变量在内存中是按几字节对齐的,根据电脑数据总线的位数,不同的对齐方式存取数据的速度不相同。这个参数对数据包网络传输等应用尤为重要,不是存取速度问题,而是数据位的精确定义问题,一般在程式中使用#pragma pack来指定。

  4) Customize:Disable Language Extensions,表示不使用微软为标准C做的语言扩展;Eliminate Duplicate Strings,主要用于字符串优化(将字符串放到缓充池里以节省空间),使用这个参数,使得

  char *sBuffer = "This is a character buffer";

  char *tBuffer = "This is a character buffer";

  sBuffer和tBuffer指向的是同一块内存空间;Enable Function-Level Linking ,告诉编译器将各个函数按打包格式编译;Enables minimal rebuild,通过保存关联信息到.IDB文档,使编译器只对最新类定义改变过的源文档进行重编译,提高编译速度;Enable Incremental Compilation,同样通过.IDB文档保存的信息,只重编译最新改变过的函数;Suppress Startup Banner and Information Messages,用以控制参数是否在output窗口输出。

  5) Listing Files:Generate browse info的功能上面已提到过。这里能够进行更多的配置。Exclude Local Variables from Browse Info表示是否将局部变量的信息放到.SBR文档中。Listing file type能够配置生成的列表信息文档的内容:Assembly-Only Listing仅生成汇编代码文档(.ASM扩展名);Assembly With Machine Code生成机器代码和汇编代码文档(.COD扩展名);Assembly With Source Code生成源代码和汇编代码文档(.ASM扩展名);Assembly, Machine Code,and Source生成机器码、源代码和汇编代码文档(.COD扩展名)。Listing file name为生成的信息文档的路径,一般为Debug或Release目录下,生成的文档名自动取源文档的文档名。

  6) Optimizations:代码优化配置。能够选择Maximize Speed生成最快速的代码,或Minimize Size生成最小尺寸的程式,或Customize定制优化。定制的内容包括:

  Assume No Aliasing,不使用别名(提高速度);

  Assume Aliasing Across Function Calls,仅函数内部不使用别名;

  Global Optimizations,全局优化,比如经常用到的变量使用寄存器保存,或循环内的计算优化,如

  i = -100;

  while( i < 0 ){ i = x y;}

  会被优化为

  i = -100;

  t = x y;

  while( i < 0 ){i = t;}

  Generate Intrinsic Functions,使用内部函数替换一些函数调用(提高速度);

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇: 什么是迭代跟递归算法?二者有什么区别?(2)

下一篇: 数据结构C语言实现系列——二叉树