成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Visual C++編譯器常用選項設置

開發
本文主要講述Visual C++編譯器常用選項設置。

編譯參數的設置。主要通過IDE的菜單項Project->Settings->C/C++頁來完成。我們可以看到這一頁的最下面Project Options中的內容,一般如下:

/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

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

1.General:

Warning level

用來控制警告信息,其中Level 1是最嚴重的級別;

Warnings as errors

將警告信息當作錯誤處理;

Optimizations

是代碼優化,

可以在CategoryOptimizations項中進行更細的設置;

Generate browse info

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

可以在CategoryListing 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

表示代碼指令優化,可以為8038680486PentiumPentium 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";

sBuffertBuffer指向的是同一塊內存空間;

Enable Function-Level Linking

告訴編譯器將各個函數按打包格式編譯

Enables minimal rebuild

通過保存關聯信息到.IDB文件,使編譯器只對最新類定義改動過的源文件進行重編譯,提高編譯速度

Enable Incremental Compilation

同樣通過.IDB文件保存的信息,只重編譯最新改動過的函數

Suppress Startup Banner and Information Messages

用以控制參數是否在output窗口輸出

 

#p#

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

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

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

使用內部函數替換一些函數調用(提高速度

Improve Float Consistency

浮點運算方面的優化

Favor Small Code

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

Frame-Pointer Omission

不使用幀指針,以提高函數調用速度

Full Optimization

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

Inline function expansion

內聯函數擴展的三種優化(使用內聯可以節省函數調用的開銷,加快程序速度)

Disable不使用內聯;

Only __inline,僅函數定義前有inline__inline標記使用內聯;

Any Suitable,除了inline__inline標記的函數外,編譯器“覺得”應該使用內聯的函數,都使用內聯。

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

8.Preprocessor:預編譯處理

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

連接參數的設置。主要通過IDE的菜單項Project->Settings->Link頁來完成。我們可以看到這一頁的最下面Project Options中的內容,一般如下:

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

#p#

Category中的各項設置

1.General:一些總體設置

可以設置生成的文件路徑、文件名;連接的庫文件;

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

Ignore All Default Libraries,放棄所有默認的庫連接;

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

Generate Mapfile,生成.MAP文件記錄模塊相關信息

Enable Profiling,這個參數通常與Generate Mapfile參數同時使用,而且如果產生Debug信息的話,不能用.PDB文件,而且必須用Microsoft Format。

2.Customize:這里可以進行使用程序數據庫文件的設置

Force File Output ,強制產生輸出文件(EXE或DLL);Print Progress Messages,可以將連接過程中的進度信息輸出到Output窗口。

3.Debug:設置是否生成調試信息,以及調試信息的格式

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

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

還可以增加額外的庫文件目錄,一般是相對于本項目的目錄,如..\Lib。Force Symbol References,可以指定連接特定符號定義的庫。

5.Output:Base Address可以改變程序默認的基地址(EXE文件默認為0x400000,DLL默認為x10000000),操作系統裝載一個程序時總是試著先從這個基地址開始

Entry-Point Symbol可以指定程序的入口地址,一般為一個函數名(且必須采用__stdcall調用約定)。一般Win32的程序,EXE的入口為WinMain,DLL的入口為DllEntryPoint;最好讓連接器自動設置程序的入口點。默認情況下,通過一個C的運行時庫函數來實現:控制臺程序采用mainCRTStartup (或wmainCRTStartup)去調用程序的main (或wmain)函數;Windows程序采用WinMainCRTStartup (或 wWinMainCRTStartup)調用程序的WinMain (或 wWinMain,必須采用__stdcall調用約定);DLL采用_DllMainCRTStartup調用DllMain函數(必須采用__stdcall調用約定)。Stack allocations,用以設置程序使用的堆棧大小(請使用十進制),默認為1兆字節。Version Information告訴連接器在EXE或DLL文件的開始部分放上版本號。

值得注意的是,上面各個參數是大小寫敏感的;在參數后加上“-”表示該參數無效;各個參數值選項

有“*”的表示為該參數的默認值;可以使用頁右上角的“Reset”按鈕來恢復該頁的所有默認設置。

#p#

其它一些參數設置

1.Project->Settings->General

可以設置連接MFC庫的方式(靜態或動態)。如果是動態連接,在你的軟件發布時不要忘了帶上MFC的DLL。

2.Project->Settings->Debug

可以設置調試時運行的可執行文件,以及命令行參數等。

3.Project->Settings->Custom Build

可以設置編譯/連接成功后自動執行一些操作。比較有用的是,寫COM時希望IDE對編譯通過的COM文件自動注冊,可以如下設置:

Description: Register COM

Commands: regsvr32 /s /c $(TargetPath)

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

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

4.Tools->Options->Directories

設置系統的Include、Library路徑。

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

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

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

3.當你的Workspace中包含多個Project的時候,你可能不能直觀地、一眼看出來哪個是當前項目。可以如下設置:Tools->Options->Format,然后在Category中選擇Workspace window,改變其默認的字體(比如設成Fixedsys)就行了。

4. 如何給已有的Project改名字?將該Project關掉。然后以文本格式打開.dsp文件,替換原來的Project名字即可。

5.VC6對類成員的智能提示功能很有用,但有時候會失靈。你可以先關掉項目,將.clw和.ncb刪掉,然后重新打開項目,點擊菜單項View->ClassWizard,在彈出的對話框中按一下“Add All”按鈕;重新Rebuild All。應該可以解決問題。

【編輯推薦】

  1. Visual C++從入門到精通
  2. 從C++轉到Java需注意的地方
  3. 淺析C++標準頭文件結構
責任編輯:楊鵬飛 來源: 天極網
相關推薦

2010-01-15 16:37:28

Visual C++

2010-01-13 14:35:10

Visual C++

2010-01-21 09:11:38

C++編譯器

2010-01-18 10:34:21

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-14 14:55:14

C++編譯器

2010-01-27 16:39:48

C++編譯器

2010-01-27 14:48:55

優秀C++編譯器

2010-01-08 16:00:46

C++編譯器

2010-01-13 17:12:26

C++編譯器

2012-02-09 09:14:32

C++

2010-01-22 18:33:17

C++編譯器

2013-03-18 09:42:47

C++C++ 11

2023-11-15 17:58:58

C++代碼

2023-12-07 19:19:21

C++模板代碼
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 中文在线一区 | 日韩图区 | 91精品国产综合久久久久久丝袜 | www.日本国产| 中文字字幕一区二区三区四区五区 | 黄页网址在线观看 | 中文字幕视频在线看5 | 国产专区在线 | 中文二区 | av在线播放免费 | 精品国产一区二区三区成人影院 | 97免费视频在线观看 | 欧美成人二区 | 中文av字幕 | a级片在线观看 | 国产精品国产三级国产aⅴ中文 | 中文字幕在线观看一区 | 亚洲三级在线观看 | 二区中文 | 国产成人免费在线观看 | 九九热在线免费视频 | 亚洲高清在线视频 | 国产亚洲欧美日韩精品一区二区三区 | 久久久女女女女999久久 | 久久久入口 | 亚洲免费精品 | a级片在线观看 | 天天影视网天天综合色在线播放 | 国产亚洲一区在线 | 精品欧美一区二区精品久久久 | 亚洲精品日韩综合观看成人91 | 激情久久网 | 涩涩鲁亚洲精品一区二区 | 九九天堂网 | 午夜精品一区 | 婷婷久久五月天 | 日日拍夜夜| 久久剧场 | 国产精品久久久久久婷婷天堂 | 亚洲一区二区精品视频 | 国产一级片 |