自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Visual C++編譯器常用選項(xiàng)設(shè)置

開(kāi)發(fā)
本文主要講述Visual C++編譯器常用選項(xiàng)設(shè)置。

編譯參數(shù)的設(shè)置。主要通過(guò)IDE的菜單項(xiàng)Project->Settings->C/C++頁(yè)來(lái)完成。我們可以看到這一頁(yè)的最下面Project Options中的內(nèi)容,一般如下:

/nologo /MDd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WIN
DOWS" /D "_AFXDLL" /D"_MBCS" /Fp"Debug/WritingDlgTest.pch" /Yu"st
dafx.h" /Fo"Debug/" /Fd"Debug/" /FD /GZ /c

各個(gè)參數(shù)代表的意義,可以參考Msdn.比如/nologo表示編譯時(shí)不在輸出窗口顯示這些設(shè)置(我們可以把這個(gè)參數(shù)去掉來(lái)看看效果)等等。一般我們不會(huì)直接修改這些設(shè)置,而是通過(guò)這一頁(yè)最上面的Category中的各項(xiàng)來(lái)完成。

1.General:

Warning level

用來(lái)控制警告信息,其中Level 1是最嚴(yán)重的級(jí)別;

Warnings as errors

將警告信息當(dāng)作錯(cuò)誤處理;

Optimizations

是代碼優(yōu)化,

可以在CategoryOptimizations項(xiàng)中進(jìn)行更細(xì)的設(shè)置;

Generate browse info

用以生成.sbr文件,記錄類、變量等符號(hào)信息,

可以在CategoryListing Files項(xiàng)中進(jìn)行更多的設(shè)置。

Debug info

生成調(diào)試信息;

None

不產(chǎn)生任何調(diào)試信息(編譯比較快)

Line Numbers Only

僅生成全局的和外部符號(hào)的調(diào)試信息到.OBJ文件或.EXE文件,減小目標(biāo)文件的尺寸

C 7.0- Compatible

記錄調(diào)試器用到的所有符號(hào)信息到.OBJ文件和.EXE文件

Program Database

創(chuàng)建.PDB文件記錄所有調(diào)試信息

Program Database for "Edit & Continue"

創(chuàng)建.PDB文件記錄所有調(diào)試信息,并且支持調(diào)試時(shí)編輯

2.C++ Language:

pointer_to_member representation

用來(lái)設(shè)置類定義/引用的先后關(guān)系,一般為Best-Case Always表示在引用類之前該類肯定已經(jīng)定義了

Enable Exception Handling

進(jìn)行同步的異常處理

Enable Run-Time Type Information

迫使編譯器增加代碼在運(yùn)行時(shí)進(jìn)行對(duì)象類型檢查

Disable Construction Displacements

設(shè)置類構(gòu)造/析構(gòu)函數(shù)調(diào)用虛函數(shù)問(wèn)題

3.Code Generation:

Processor

表示代碼指令優(yōu)化,可以為80386、80486Pentium、Pentium Pro,或者Blend表示混合以上各種優(yōu)化。

Use run-time library

用以指定程序運(yùn)行時(shí)使用的運(yùn)行時(shí)庫(kù)(單線程或多線程,Debug版本或Release版本),有一個(gè)原則就是,一個(gè)進(jìn)程不要同時(shí)使用幾個(gè)版本的運(yùn)行時(shí)庫(kù)。

 

Single-Threaded

靜態(tài)連接LIBC.LIB庫(kù)

Debug Single-Threaded

靜態(tài)連接LIBCD.LIB庫(kù)

Multithreaded

靜態(tài)連接LIBCMT.LIB庫(kù)

Debug Multithreaded

靜態(tài)連接LIBCMTD.LIB庫(kù)

Multithreaded DLL

動(dòng)態(tài)連接MSVCRT.DLL庫(kù)

Debug Multithreaded DLL

動(dòng)態(tài)連接MSVCRTD.DLL庫(kù)。連接了單線程庫(kù)就不支持多線程調(diào)用,連接了多線程庫(kù)就要求創(chuàng)建多線程的應(yīng)用程序。

 

Calling convention

可以用來(lái)設(shè)定調(diào)用約定,有三種:__cdecl、__fastcall__stdcall。各種調(diào)用約定的主要區(qū)別在于,函數(shù)調(diào)用時(shí),函數(shù)的參數(shù)是從左到右壓入堆棧還是從右到左壓入堆棧;在函數(shù)返回時(shí),由函數(shù)的調(diào)用者來(lái)清理壓入堆棧的參數(shù)還是由函數(shù)本身來(lái)清理;以及在編譯時(shí)對(duì)函數(shù)名進(jìn)行的命名修飾(可以通過(guò)Listing Files看到各種命名修飾方式)。

 

Struct member alignment

用以指定數(shù)據(jù)結(jié)構(gòu)中的成員變量在內(nèi)存中是按幾字節(jié)對(duì)齊的,根據(jù)計(jì)算機(jī)數(shù)據(jù)總線的位數(shù),不同的對(duì)齊方式存取數(shù)據(jù)的速度不一樣。這個(gè)參數(shù)對(duì)數(shù)據(jù)包網(wǎng)絡(luò)傳輸?shù)葢?yīng)用尤為重要,不是存取速度問(wèn)題,而是數(shù)據(jù)位的精確定義問(wèn)題,一般在程序中使用#pragma pack來(lái)指定。

4.Customize:

Disable Language Extensions

表示不使用微軟為標(biāo)準(zhǔn)C做的語(yǔ)言擴(kuò)展

Eliminate Duplicate Strings

主要用于字符串優(yōu)化(將字符串放到緩充池里以節(jié)省空間),使用這個(gè)參數(shù),使得

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

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

sBuffertBuffer指向的是同一塊內(nèi)存空間;

Enable Function-Level Linking

告訴編譯器將各個(gè)函數(shù)按打包格式編譯

Enables minimal rebuild

通過(guò)保存關(guān)聯(lián)信息到.IDB文件,使編譯器只對(duì)最新類定義改動(dòng)過(guò)的源文件進(jìn)行重編譯,提高編譯速度

Enable Incremental Compilation

同樣通過(guò).IDB文件保存的信息,只重編譯最新改動(dòng)過(guò)的函數(shù)

Suppress Startup Banner and Information Messages

用以控制參數(shù)是否在output窗口輸出

 

#p#

5.Listing Files:

Generate browse info

的功能上面已經(jīng)提到過(guò)。這里可以進(jìn)行更多的設(shè)置。

Exclude Local Variables from Browse Info

表示是否將局部變量的信息放到.SBR文件中。

Listing file type

可以設(shè)置生成的列表信息文件的內(nèi)容:Assembly-Only Listing僅生成匯編代碼文件(.ASM擴(kuò)展名)

Assembly With Machine Code

生成機(jī)器代碼和匯編代碼文件(.COD擴(kuò)展名)

 

Assembly With Source Code

生成源代碼和匯編代碼文件(.ASM擴(kuò)展名)

Assembly, Machine Code,and Source

生成機(jī)器碼、源代碼和匯編代碼文件(.COD擴(kuò)展名)

Listing file name

為生成的信息文件的路徑,一般為DebugRelease目錄下,生成的文件名自動(dòng)取源文件的文件名。

6.Optimizations:

Maximize Speed

生成最快速的代碼

Minimize Size

生成最小尺寸的程序

Customize

Assume No Aliasing

不使用別名(提高速度)

Assume Aliasing Across Function Calls

僅函數(shù)內(nèi)部不使用別名

Global Optimizations

全局優(yōu)化,比如經(jīng)常用到的變量使用寄存器保存,或者循環(huán)內(nèi)的計(jì)算優(yōu)化,如:

i = -100;

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

會(huì)被優(yōu)化為

i = -100;

t = x + y;

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

Generate Intrinsic Functions

使用內(nèi)部函數(shù)替換一些函數(shù)調(diào)用(提高速度

Improve Float Consistency

浮點(diǎn)運(yùn)算方面的優(yōu)化

Favor Small Code

程序(exedll)尺寸優(yōu)化優(yōu)先于代碼速度優(yōu)化

Frame-Pointer Omission

不使用幀指針,以提高函數(shù)調(diào)用速度

Full Optimization

組合了幾種參數(shù),以生成最快的程序代碼

Inline function expansion

內(nèi)聯(lián)函數(shù)擴(kuò)展的三種優(yōu)化(使用內(nèi)聯(lián)可以節(jié)省函數(shù)調(diào)用的開(kāi)銷,加快程序速度)

Disable不使用內(nèi)聯(lián);

Only __inline,僅函數(shù)定義前有inline__inline標(biāo)記使用內(nèi)聯(lián);

Any Suitable,除了inline__inline標(biāo)記的函數(shù)外,編譯器“覺(jué)得”應(yīng)該使用內(nèi)聯(lián)的函數(shù),都使用內(nèi)聯(lián)。

7.Precompiled Headers:預(yù)編譯頭文件的設(shè)置。使用預(yù)編譯可以提高重復(fù)編譯的速度。IDE一般將一些公共的、不大變動(dòng)的頭文件(比如afxwin.h等)集中放到stdafx.h中,這一部分代碼就不必每次都重新編譯(除非是Rebuild All)。

8.Preprocessor:預(yù)編譯處理

可以定義/解除定義一些常量。Additional include directories,可以指定額外的包含目錄,一般是相對(duì)于本項(xiàng)目的目錄,如……\\Include.

連接參數(shù)的設(shè)置。主要通過(guò)IDE的菜單項(xiàng)Project->Settings->Link頁(yè)來(lái)完成。我們可以看到這一頁(yè)的最下面Project Options中的內(nèi)容,一般如下:

/nologo /subsystem:windows /incremental:yes /pdb:"Debug/WritingDlgTest.pdb" /debug /machi ne:I386 /out:"Debug/WritingDlgTest.exe" /pdbtype:sept

#p#

Category中的各項(xiàng)設(shè)置

1.General:一些總體設(shè)置

可以設(shè)置生成的文件路徑、文件名;連接的庫(kù)文件;

Generate debug info,生成Debug信息到.PDB文件(具體格式可以在Category->Debug中設(shè)置);

Ignore All Default Libraries,放棄所有默認(rèn)的庫(kù)連接;

Link Incrementally,通過(guò)生成. ILK文件實(shí)現(xiàn)遞增式連接以提高后續(xù)連接速度,但一般這種方式下生成的文件(EXE或DLL)較大;

Generate Mapfile,生成.MAP文件記錄模塊相關(guān)信息

Enable Profiling,這個(gè)參數(shù)通常與Generate Mapfile參數(shù)同時(shí)使用,而且如果產(chǎn)生Debug信息的話,不能用.PDB文件,而且必須用Microsoft Format。

2.Customize:這里可以進(jìn)行使用程序數(shù)據(jù)庫(kù)文件的設(shè)置

Force File Output ,強(qiáng)制產(chǎn)生輸出文件(EXE或DLL);Print Progress Messages,可以將連接過(guò)程中的進(jìn)度信息輸出到Output窗口。

3.Debug:設(shè)置是否生成調(diào)試信息,以及調(diào)試信息的格式

格式可以有Microsoft Format、COFF Format(Common Object File Format)和Both Formats三種選擇;Separate Types,表示將Debug格式信息以獨(dú)立的.PDB文件存放,還是直接放在各個(gè)源文件的.PDB文件中。選中的話,表示采用后者的方式,這種方式調(diào)試啟動(dòng)比較快。

4.Input:這里可以指定要連接的庫(kù)文件,放棄連接的庫(kù)文件

還可以增加額外的庫(kù)文件目錄,一般是相對(duì)于本項(xiàng)目的目錄,如..\Lib。Force Symbol References,可以指定連接特定符號(hào)定義的庫(kù)。

5.Output:Base Address可以改變程序默認(rèn)的基地址(EXE文件默認(rèn)為0x400000,DLL默認(rèn)為x10000000),操作系統(tǒng)裝載一個(gè)程序時(shí)總是試著先從這個(gè)基地址開(kāi)始

Entry-Point Symbol可以指定程序的入口地址,一般為一個(gè)函數(shù)名(且必須采用__stdcall調(diào)用約定)。一般Win32的程序,EXE的入口為WinMain,DLL的入口為DllEntryPoint;最好讓連接器自動(dòng)設(shè)置程序的入口點(diǎn)。默認(rèn)情況下,通過(guò)一個(gè)C的運(yùn)行時(shí)庫(kù)函數(shù)來(lái)實(shí)現(xiàn):控制臺(tái)程序采用mainCRTStartup (或wmainCRTStartup)去調(diào)用程序的main (或wmain)函數(shù);Windows程序采用WinMainCRTStartup (或 wWinMainCRTStartup)調(diào)用程序的WinMain (或 wWinMain,必須采用__stdcall調(diào)用約定);DLL采用_DllMainCRTStartup調(diào)用DllMain函數(shù)(必須采用__stdcall調(diào)用約定)。Stack allocations,用以設(shè)置程序使用的堆棧大小(請(qǐng)使用十進(jìn)制),默認(rèn)為1兆字節(jié)。Version Information告訴連接器在EXE或DLL文件的開(kāi)始部分放上版本號(hào)。

值得注意的是,上面各個(gè)參數(shù)是大小寫敏感的;在參數(shù)后加上“-”表示該參數(shù)無(wú)效;各個(gè)參數(shù)值選項(xiàng)

有“*”的表示為該參數(shù)的默認(rèn)值;可以使用頁(yè)右上角的“Reset”按鈕來(lái)恢復(fù)該頁(yè)的所有默認(rèn)設(shè)置。

#p#

其它一些參數(shù)設(shè)置

1.Project->Settings->General

可以設(shè)置連接MFC庫(kù)的方式(靜態(tài)或動(dòng)態(tài))。如果是動(dòng)態(tài)連接,在你的軟件發(fā)布時(shí)不要忘了帶上MFC的DLL。

2.Project->Settings->Debug

可以設(shè)置調(diào)試時(shí)運(yùn)行的可執(zhí)行文件,以及命令行參數(shù)等。

3.Project->Settings->Custom Build

可以設(shè)置編譯/連接成功后自動(dòng)執(zhí)行一些操作。比較有用的是,寫COM時(shí)希望IDE對(duì)編譯通過(guò)的COM文件自動(dòng)注冊(cè),可以如下設(shè)置:

Description: Register COM

Commands: regsvr32 /s /c $(TargetPath)

echo regsvr32 exe.time > $(TargetDir)\$(TargetName).trg

Outputs: $(TargetDir)\$(TargetName).trg

4.Tools->Options->Directories

設(shè)置系統(tǒng)的Include、Library路徑。

一些小竅門(針對(duì)Visual C++)

1.有時(shí)候,你可能在編譯的時(shí)候,計(jì)算機(jī)突然非法關(guān)機(jī)了(可能某人不小心碰了電源或你的內(nèi)存不穩(wěn)定等原因)。當(dāng)你重啟機(jī)器后打開(kāi)剛才的項(xiàng)目,重新進(jìn)行編譯,發(fā)現(xiàn)IDE會(huì)崩掉。你或許以為你的編譯器壞了,其實(shí)不然(你試試編譯其它項(xiàng)目,還是好的!),你只要將項(xiàng)目的.ncb、.opt、.aps、.clw文件以及Debug、Release目錄下的所有文件都刪掉,然后重新編譯就行了。

2.如果你想與別人共享你的源代碼項(xiàng)目,但是把整個(gè)項(xiàng)目做拷貝又太大。你完全可以刪掉以下文件:.dsw、.ncb、.opt、.aps、.clw、. plg文件以及Debug、Release目錄下的所有文件。

3.當(dāng)你的Workspace中包含多個(gè)Project的時(shí)候,你可能不能直觀地、一眼看出來(lái)哪個(gè)是當(dāng)前項(xiàng)目??梢匀缦略O(shè)置:Tools->Options->Format,然后在Category中選擇Workspace window,改變其默認(rèn)的字體(比如設(shè)成Fixedsys)就行了。

4. 如何給已有的Project改名字?將該P(yáng)roject關(guān)掉。然后以文本格式打開(kāi).dsp文件,替換原來(lái)的Project名字即可。

5.VC6對(duì)類成員的智能提示功能很有用,但有時(shí)候會(huì)失靈。你可以先關(guān)掉項(xiàng)目,將.clw和.ncb刪掉,然后重新打開(kāi)項(xiàng)目,點(diǎn)擊菜單項(xiàng)View->ClassWizard,在彈出的對(duì)話框中按一下“Add All”按鈕;重新Rebuild All。應(yīng)該可以解決問(wèn)題。

【編輯推薦】

  1. Visual C++從入門到精通
  2. 從C++轉(zhuǎn)到Java需注意的地方
  3. 淺析C++標(biāo)準(zhǔn)頭文件結(jié)構(gòu)
責(zé)任編輯:楊鵬飛 來(lái)源: 天極網(wǎng)
相關(guān)推薦

2010-01-15 16:37:28

Visual C++

2010-01-13 14:35:10

Visual C++

2010-01-18 10:34:21

C++編譯器

2010-01-21 09:11:38

C++編譯器

2010-01-18 10:28:15

C++編譯器

2010-10-20 13:43:37

C++編譯器

2010-01-14 15:29:44

C++編譯器

2010-02-03 13:14:03

C++編譯器命令

2010-01-12 16:42:59

C++編譯器

2010-01-21 09:26:53

CC++編譯器

2010-01-27 16:39:48

C++編譯器

2010-01-14 14:55:14

C++編譯器

2010-01-27 14:48:55

優(yōu)秀C++編譯器

2010-01-08 16:00:46

C++編譯器

2012-02-09 09:14:32

C++

2010-01-13 17:12:26

C++編譯器

2010-01-22 18:33:17

C++編譯器

2013-03-18 09:42:47

C++C++ 11

2023-11-15 17:58:58

C++代碼

2010-01-13 13:42:55

C++編譯器
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)