青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

posts - 9,comments - 14,trackbacks - 0
大家可能一直在用VC開發軟件,但是對于這個編譯器卻未必很了解。原因是多方面的。大多數情況下,我們只停留在“使用”它,而不會想去“了解”它。因為它只是一個工具,我們寧可把更多的精力放在C++語言和軟件設計上。我們習慣于這樣一種“模式”:建立一個項目,然后寫代碼,然后編譯,反反復復調試。但是,所謂:“公欲善其事,必先利其器”。如果我們精于VC開發環境,我們是不是能夠做得更加游刃有余呢??

  閑話少說。我們先來看一下VC的處理流程,大致分為兩步:編譯和連接。源文件通過編譯生成了.obj文件;所有.obj文件和.lib文件通過連接生成.exe文件或.dll文件。下面,我們分別討論這兩個步驟的一些細節。


  編譯參數的設置。主要通過VC的菜單項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,使用內部函數替換一些函數調用(提高速度);?
Improve?Float?Consistency,浮點運算方面的優化;
Favor?Small?Code,程序(exe或dll)尺寸優化優先于代碼速度優化;
Favor?Fast?Code,程序(exe或dll)代碼速度優化優先于尺寸優化;
Frame-Pointer?Omission,不使用幀指針,以提高函數調用速度;
Full?Optimization,組合了幾種參數,以生成最快的程序代碼。
?

  Inline?function?expansion,內聯函數擴展的三種優化(使用內聯可以節省函數調用的開銷,加快程序速度):Disable不使用內聯;Only?__inline,僅函數定義前有inline或__inline標記使用內聯;Any?Suitable,除了inline或__inline標記的函數外,編譯器“覺得”應該使用內聯的函數,都使用內聯。

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

  8)?Preprocessor:預編譯處理。可以定義/解除定義一些常量。Additional?include?directories,可以指定額外的包含目錄,一般是相對于本項目的目錄,如..\Include。


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

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

  下面我們分別來看一下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”按鈕來恢復該頁的所有默認設置。


  其它一些參數設置

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

  2)?Project->Settings->Debug,可以設置調試時運行的可執行文件,以及命令行參數等。

  3)?Project->Settings->Custom?Build,可以設置編譯/連接成功后自動執行一些操作。比較有
用的是,寫COM時希望VC對編譯通過的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路徑。


  一些小竅門

  1)?有時候,你可能在編譯的時候,計算機突然非法關機了(可能某人不小心碰了電源或你的內存不穩定等原因)。當你重啟機器后打開剛才的項目,重新進行編譯,發現VC會崩掉。你或許以為你的VC編譯器壞了,其實不然(你試試編譯其它項目,還是好的!),你只要將項目的.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。應該可以解決問題。
posted on 2006-04-19 05:09 陣雨 閱讀(564) 評論(0)  編輯 收藏 引用
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲精品欧美日韩专区| 亚洲精品韩国| 久久午夜av| 久久国产精品亚洲77777| 宅男噜噜噜66一区二区| a4yy欧美一区二区三区| 正在播放日韩| 午夜久久黄色| 久久综合狠狠综合久久激情| 久久久久久久波多野高潮日日| 久久久一本精品99久久精品66| 老妇喷水一区二区三区| 久久精品女人天堂| 欧美国产免费| 欧美日韩免费在线| 欧美三级电影精品| 国产一区二区三区四区hd| 激情自拍一区| 在线视频你懂得一区| 久久久久国产一区二区三区四区| 欧美成人综合网站| 一本色道久久88综合日韩精品| 亚洲女同同性videoxma| 久久精品视频在线看| 欧美精品系列| 国产一区二区三区四区五区美女| 亚洲福利视频网| 亚洲综合视频网| 欧美黑人多人双交| 亚洲尤物在线| 欧美精品一卡二卡| 怡红院av一区二区三区| 亚洲永久网站| 亚洲国产一区二区视频| 亚洲精品在线免费| 欧美在线观看视频一区二区| 欧美日韩国产三区| 亚洲国产精品久久久久秋霞影院| 午夜精品久久久久久久99水蜜桃 | 午夜伦欧美伦电影理论片| 老司机免费视频一区二区三区| 欧美午夜电影在线| 亚洲激情第一页| 久久精品夜色噜噜亚洲aⅴ| 亚洲黄一区二区| 久久久久国产一区二区三区| 国产精品国产三级国产普通话99| 亚洲国产精品99久久久久久久久| 亚洲欧美日韩视频一区| 日韩午夜av在线| 久久综合狠狠综合久久激情| 国产一区二区三区精品欧美日韩一区二区三区 | 免费在线观看日韩欧美| 香蕉久久a毛片| 国产精品视频免费观看www| 一本色道久久88精品综合| 欧美成年人在线观看| 欧美一区亚洲一区| 欧美成人中文| 亚洲美女毛片| 亚洲日本久久| 欧美专区在线| 亚洲一区久久久| 欧美视频在线不卡| 亚洲国产精品va在线看黑人| 欧美在线不卡| 亚洲图片欧美午夜| 欧美图区在线视频| 亚洲一区一卡| 亚洲欧美日韩在线综合| 国产精品成人免费视频 | 999亚洲国产精| 亚洲国产精品一区| 欧美成人69av| 在线综合亚洲欧美在线视频| 日韩一二三区视频| 国产精品你懂的| 久久精品国产亚洲一区二区| 欧美在线网站| 亚洲精品视频啊美女在线直播| 亚洲福利视频二区| 欧美高清一区二区| 亚洲已满18点击进入久久| 欧美在线观看网址综合| 在线免费观看视频一区| 亚洲日本欧美在线| 国产精品日韩在线播放| 美日韩精品视频免费看| 欧美另类久久久品| 欧美一区二区三区在线观看| 久久精品成人| 中文在线不卡视频| 久久久精品999| 亚洲天堂av高清| 欧美中在线观看| 日韩一级大片在线| 欧美一区二区三区视频免费播放 | 亚洲欧美日韩中文播放| 久久av一区二区| 99av国产精品欲麻豆| 亚洲女同精品视频| 亚洲美女中出| 久久久国产亚洲精品| 一本一本a久久| 久久久国产一区二区| 一区二区黄色| 久久久久久亚洲精品中文字幕 | 国产日产精品一区二区三区四区的观看方式| 欧美一区二区精品在线| 欧美第一黄色网| 欧美在线免费观看视频| 欧美成人在线免费观看| 欧美午夜不卡在线观看免费 | 日韩视频免费大全中文字幕| 亚洲欧美视频在线观看视频| 亚洲美女啪啪| 免费不卡亚洲欧美| 久久青草福利网站| 国产精品一区二区你懂得 | 欧美一区二区三区在| 亚洲午夜av| 欧美精品在线免费| 欧美国产精品日韩| 国产性天天综合网| 在线视频精品一| 日韩视频一区二区在线观看| 久久久免费av| 久久精品视频亚洲| 国产精品亚洲а∨天堂免在线| 91久久久久久国产精品| 亚洲高清色综合| 久久午夜精品一区二区| 久久久精品国产一区二区三区| 欧美日韩一区二| 99视频超级精品| 亚洲一区二区三区视频| 国产精品xxxav免费视频| 夜夜嗨av一区二区三区免费区| 夜夜嗨网站十八久久| 麻豆av一区二区三区| 欧美韩国在线| 亚洲免费观看| 欧美日韩一区三区四区| 亚洲卡通欧美制服中文| 亚洲一级一区| 国产欧美精品在线| 性视频1819p久久| 久久久爽爽爽美女图片| 国模精品一区二区三区色天香| 欧美一区二视频在线免费观看| 久久人91精品久久久久久不卡| 国内精品嫩模av私拍在线观看 | 国产精品中文字幕在线观看| 亚洲自拍高清| 久久久国产成人精品| 黄色亚洲网站| 蜜桃av一区二区| 亚洲美女精品一区| 欧美一区二区精品久久911| 激情欧美日韩| 欧美日本在线视频| 在线一区亚洲| 麻豆视频一区二区| 亚洲精品国产精品国自产在线| 欧美日韩免费区域视频在线观看| 一区二区三区波多野结衣在线观看| 久久国产天堂福利天堂| 最新国产の精品合集bt伙计| 欧美另类变人与禽xxxxx| 亚洲免费黄色| 国产精品成人观看视频免费| 欧美伊久线香蕉线新在线| 久久精品亚洲精品| 亚洲国产国产亚洲一二三| 欧美日韩一区二区三区免费看| 亚洲先锋成人| 欧美高清一区| 久久成人18免费观看| 亚洲国产精品成人精品 | 精品96久久久久久中文字幕无| 欧美日韩国产精品一区| 久久不射中文字幕| 亚洲精选视频在线| 噜噜噜久久亚洲精品国产品小说| 99国产精品久久| 狠狠色丁香婷综合久久| 国产精品久久久久久五月尺 | 欧美视频中文字幕在线| 久久国产福利| 亚洲在线视频观看| 亚洲美女毛片| 欧美激情第一页xxx| 欧美一区二区精美| 国产精品99久久久久久久久| 亚洲二区三区四区| 伊人久久亚洲热| 国产在线视频欧美一区二区三区| 欧美午夜精品久久久久久久 | 亚洲黄色免费| 老鸭窝91久久精品色噜噜导演|