<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                **【文章摘要】** Microsoft Visual C++是微軟公司推出的、在Windows下的可視化集成編程系統,也是廣大軟件工程師使用得比較多的一款編程軟件。本文主要講述Visual C++編譯器常用的選項設置,為大家全面掌握該軟件以進行軟件開發工作提供了有益的參考。 **【關鍵詞】** Visual C++??選項設置??編譯??調試 ### 一、前言 Microsoft Visual C++是Microsoft公司推出的開發Win32環境程序,面向對象的可視化集成編程系統。它不但具有程序框架自動生成、靈活方便的類管理、代碼編寫和界面設計集成交互操作、可開發多種程序等優點,而且通過簡單的設置就可使其生成的程序框架支持數據庫接口、OLE2、WinSock網絡和3D控制界面等。 但是,大多數編程人員只是使用了其基本功能,沒有對之進行深入的了解,如不知道Visual C++編譯器常用選項的設置就是一例。通過閱讀相關資料,作者對Visual C++編譯器常用選項設置進行了總結,希望能夠對大家所從事的研發工作有所幫助。 ### 二、 編譯參數的設置 這主要是通過IDE的菜單項“Project->Settings->C/C++”來完成的。如圖1所示。 ![](https://box.kancloud.cn/2016-02-24_56cd85c68ebca.jpg) 圖1?“Project Settings”的示意圖1 我們一般通過修改這一頁上的“Category”中的各項來完成編譯參數的設置。“Category”中共有8個選項,包括:General、C++ Language、Code Generation、Customize、Listing Files、Optimizations、Precompiled Headers和Preprocessor。以下分別介紹在每個參數下的配置情況。 1. General 當“Category”一欄選擇“General”時,界面如圖1所示。其它各欄的介紹如表1所示。 表1?“General”下的配置介紹 <table border="1" cellspacing="0" cellpadding="0"><tbody><tr><td valign="top" style="background-color:rgb(204,204,204)"><p align="center" style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"><strong><span style="font-size:18px">名稱</span></strong></p></td><td valign="top" style="background-color:rgb(204,204,204)"><p align="center" style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"><strong><span style="font-size:18px">功能簡介</span></strong></p></td></tr><tr><td valign="top"><p align="center" style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"><span style="font-family:'Times New Roman'; font-size:18px">Warning level</span></p></td><td valign="top"><p align="left" style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"><span style="font-size:18px">用來控制警告信息,其中<span style="font-family:'Times New Roman'">Level 1</span>是最嚴重的級別。</span></p></td></tr><tr><td valign="top"><p align="center" style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"><span style="font-family:'Times New Roman'; font-size:18px">Optimizations</span></p></td><td valign="top"><p align="left" style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"><span style="font-size:18px">是代碼優化,可以在<span style="font-family:'Times New Roman'">Category</span>的<span style="font-family:'Times New Roman'">Optimizations</span>項中進行更細的設置。</span></p></td></tr><tr><td valign="top"><p align="center" style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"><span style="font-family:'Times New Roman'; font-size:18px">Warnings as errors</span></p></td><td valign="top"><p align="left" style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"><span style="font-size:18px">將警告信息當作錯誤處理。</span></p></td></tr><tr><td valign="top"><p align="center" style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"><span style="font-family:'Times New Roman'; font-size:18px">Generate browse info</span></p></td><td valign="top"><p align="left" style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"><span style="font-size:18px">用以生成<span style="font-family:'Times New Roman'">.sbr</span>文件,記錄類、變量等符號信息,可以在<span style="font-family:'Times New Roman'">Category</span>的<span style="font-family:'Times New Roman'">Listing Files</span>項中進行更多的設置。</span></p></td></tr><tr><td valign="top"><p align="center" style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"><span style="font-family:'Times New Roman'; font-size:18px">?</span></p><p align="center" style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"><span style="font-family:'Times New Roman'; font-size:18px">?</span></p><p align="center" style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"><span style="font-family:'Times New Roman'; font-size:18px">?</span></p><p align="center" style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"><span style="font-family:'Times New Roman'; font-size:18px">Debug info????</span></p></td><td valign="top"><p align="left" style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"><span style="font-size:18px">生成調試信息,包括:</span></p><p align="left" style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"><span style="font-size:18px"><span style="font-family:'Times New Roman'">1)</span>??????? None:不產生任何調試信息<span style="font-family:'Times New Roman'">(</span>編譯比較快<span style="font-family:'Times New Roman'">)</span>。</span></p><p align="left" style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"><span style="font-size:18px"><span style="font-family:'Times New Roman'">2)</span>??????? Line Numbers Only:僅生成全局的和外部符號的調試信息到<span style="font-family:'Times New Roman'">.OBJ</span>文件或<span style="font-family:'Times New Roman'">.EXE</span>文件,減小目標文件的尺寸。</span></p><p align="left" style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"><span style="font-size:18px"><span style="font-family:'Times New Roman'">3)</span>??????? C7 Compatible:記錄調試器用到的所有符號信息到<span style="font-family:'Times New Roman'">.OBJ</span>文件和<span style="font-family:'Times New Roman'">.EXE</span>文件。</span></p><p align="left" style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"><span style="font-size:18px"><span style="font-family:'Times New Roman'">4)</span>??????? Program Database:創建<span style="font-family:'Times New Roman'">.PDB</span>文件記錄所有調試信息。</span></p><p align="left" style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"><span style="font-size:18px"><span style="font-family:'Times New Roman'">5)</span>??????? Program Database for "Edit &amp; Continue:創建<span style="font-family:'Times New Roman'">.PDB</span>文件記錄所有調試信息,并且支持調試時編輯。</span></p></td></tr></tbody></table> 2.C++ Language 當“Category”一欄選擇“C++ Language”時,界面如圖2所示。其它各欄的介紹如表2所示。 ![](https://box.kancloud.cn/2016-02-24_56cd85c6aa145.jpg) 圖2?“Project Settings”的示意圖2 表2?“C++ Language”下的配置介紹 <table border="1" cellspacing="0" cellpadding="0"><tbody><tr><td valign="top" style="background-color:rgb(204,204,204)"><p align="center" style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"><strong><span style="font-size:18px">名稱</span></strong></p></td><td valign="top" style="background-color:rgb(204,204,204)"><p align="center" style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"><strong><span style="font-size:18px">功能簡介</span></strong></p></td></tr><tr><td valign="top"><p align="center" style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"><span style="font-family:'Times New Roman'; font-size:18px">Pointer-to-member representation</span></p></td><td valign="top"><p align="left" style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"><span style="font-size:18px">用來設置類定義<span style="font-family:'Times New Roman'">/</span>引用的先后關系,一般為<span style="font-family:'Times New Roman'">Best-Case Always</span>表示在引用類之前該類肯定已經定義了。</span></p></td></tr><tr><td valign="top"><p align="center" style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"><span style="font-family:'Times New Roman'; font-size:18px">Enable Exception Handling</span></p></td><td valign="top"><p align="left" style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"><span style="font-size:18px">進行同步的異常處理。</span></p></td></tr><tr><td valign="top"><p align="center" style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"><span style="font-family:'Times New Roman'; font-size:18px">Enable Run-Time Type Information</span></p></td><td valign="top"><p align="left" style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"><span style="font-size:18px">迫使編譯器增加代碼在運行時進行對象類型檢查。</span></p></td></tr><tr><td valign="top"><p align="center" style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"><span style="font-family:'Times New Roman'; font-size:18px">Disable Construction Displacements</span></p></td><td valign="top"><p align="left" style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"><span style="font-size:18px">設置類構造<span style="font-family:'Times New Roman'">/</span>析構函數調用虛函數問題。</span></p></td></tr></tbody></table> 3.Code Generation 當“Category”一欄選擇“Code Generation”時,界面如圖3所示。其它各欄的介紹如表3所示。 ![](https://box.kancloud.cn/2016-02-24_56cd85c6c789f.jpg) 圖3?“Project Settings”的示意圖3 表3?“Code Generation”下的配置介紹 <table border="1" cellspacing="0" cellpadding="0"><tbody><tr><td valign="top" style="background-color:rgb(204,204,204)"><p align="center" style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"><strong><span style="font-size:18px">名稱</span></strong></p></td><td valign="top" style="background-color:rgb(204,204,204)"><p align="center" style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"><strong><span style="font-size:18px">功能簡介</span></strong></p></td></tr><tr><td valign="top"><p align="center" style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"><span style="font-family:'Times New Roman'; font-size:18px">Processor</span></p></td><td valign="top"><p align="left" style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"><span style="font-size:18px">表示代碼指令優化,可以為<span style="font-family:'Times New Roman'">80386</span>、<span style="font-family:'Times New Roman'">80486</span>、<span style="font-family:'Times New Roman'">Pentium</span>、<span style="font-family:'Times New Roman'">Pentium Pro</span>,或者<span style="font-family:'Times New Roman'">Blend</span>表示混合以上各種優化。</span></p></td></tr><tr><td valign="top"><p align="center" style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"><span style="font-family:'Times New Roman'; font-size:18px">?</span></p><p align="center" style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"><span style="font-family:'Times New Roman'; font-size:18px">?</span></p><p align="center" style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"><span style="font-family:'Times New Roman'; font-size:18px">?</span></p><p align="center" style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"><span style="font-family:'Times New Roman'; font-size:18px">?</span></p><p align="center" style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"><span style="font-family:'Times New Roman'; font-size:18px">?</span></p><p align="center" style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"><span style="font-family:'Times New Roman'; font-size:18px">Use run-time library</span></p></td><td valign="top"><p align="left" style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"><span style="font-size:18px">用以指定程序運行時使用的運行時庫<span style="font-family:'Times New Roman'">(</span>單線程或多線程,<span style="font-family:'Times New Roman'">Debug</span>版本或<span style="font-family:'Times New Roman'">Release</span>版本<span style="font-family:'Times New Roman'">)</span>,有一個原則就是,一個進程不要同時使用幾個版本的運行時庫。具體包括:</span></p><p align="left" style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"><span style="font-size:18px"><span style="font-family:'Times New Roman'">1)</span>??????? Single-Threaded:靜態連接<span style="font-family:'Times New Roman'">LIBC.LIB</span>庫。</span></p><p align="left" style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"><span style="font-size:18px"><span style="font-family:'Times New Roman'">2)</span>??????? Multithreaded:靜態連接<span style="font-family:'Times New Roman'">LIBCMT.LIB</span>庫。</span></p><p align="left" style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"><span style="font-size:18px"><span style="font-family:'Times New Roman'">3)</span>??????? Multithreaded DLL:動態連接<span style="font-family:'Times New Roman'">MSVCRT.DLL</span>庫。</span></p><p align="left" style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"><span style="font-size:18px"><span style="font-family:'Times New Roman'">4)</span>??????? Debug Single-Threaded:靜態連接<span style="font-family:'Times New Roman'">LIBCD.LIB</span>庫。</span></p><p align="left" style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"><span style="font-size:18px"><span style="font-family:'Times New Roman'">5)</span>??????? Debug Multithreaded:靜態連接<span style="font-family:'Times New Roman'">LIBCMTD.LIB</span>庫。</span></p><p align="left" style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"><span style="font-size:18px"><span style="font-family:'Times New Roman'">6)</span>??????? Debug Multithreaded DLL:動態連接<span style="font-family:'Times New Roman'">MSVCRTD.DLL</span>庫。連接了單線程庫就不支持多線程調用,連接了多線程庫就要求創建多線程的應用程序。</span></p></td></tr><tr><td valign="top"><p align="center" style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"><span style="font-family:'Times New Roman'; font-size:18px">?</span></p><p align="center" style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"><span style="font-family:'Times New Roman'; font-size:18px">?</span></p><p align="center" style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"><span style="font-family:'Times New Roman'; font-size:18px">Calling convention</span></p></td><td valign="top"><p align="left" style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"><span style="font-size:18px">可以用來設定調用約定,有三種:<span style="font-family:'Times New Roman'">__cdecl</span>、<span style="font-family:'Times New Roman'">__fastcall</span>和<span style="font-family:'Times New Roman'">__stdcall</span>。各種調用約定的主要區別在于,函數調用時,函數的參數是從左到右壓入堆棧還是從右到左壓入堆棧;在函數返回時,由函數的調用者來清理壓入堆棧的參數還是由函數本身來清理;以及在編譯時對函數名進行的命名修飾<span style="font-family:'Times New Roman'">(</span>可以通過<span style="font-family:'Times New Roman'">Listing Files</span>看到各種命名修飾方式<span style="font-family:'Times New Roman'">)</span>。</span></p></td></tr><tr><td valign="top"><p align="center" style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"><span style="font-family:'Times New Roman'; font-size:18px">?</span></p><p align="center" style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"><span style="font-family:'Times New Roman'; font-size:18px">Struct member alignment</span></p></td><td valign="top"><p align="left" style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"><span style="font-size:18px">用以指定數據結構中的成員變量在內存中是按幾字節對齊的,根據計算機數據總線的位數,不同的對齊方式存取數據的速度不一樣。這個參數對數據包網絡傳輸等應用尤為重要,不是存取速度問題,而是數據位的精確定義問題,一般在程序中使用<span style="font-family:'Times New Roman'">#pragma pack</span>來指定。</span></p></td></tr></tbody></table> 4. Customize 當“Category”一欄選擇“Customize”時,界面如圖4所示。其它各欄的介紹如表4所示。 ![](https://box.kancloud.cn/2016-02-24_56cd85c6e0913.jpg) 圖4?“Project Settings”的示意圖4 表4?“Customize”下的配置介紹 <table border="1" cellspacing="0" cellpadding="0"><tbody><tr><td valign="top" style="background-color:rgb(204,204,204)"><p align="center" style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"><strong><span style="font-size:18px">名稱</span></strong></p></td><td valign="top" style="background-color:rgb(204,204,204)"><p align="center" style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"><strong><span style="font-size:18px">功能簡介</span></strong></p></td></tr><tr><td valign="top"><p align="center" style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"><span style="font-family:'Times New Roman'; font-size:18px">Disable Language Extensions</span></p></td><td valign="top"><p align="left" style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"><span style="font-size:18px">表示不使用微軟為標準<span style="font-family:'Times New Roman'">C</span>做的語言擴展。</span></p></td></tr><tr><td valign="top"><p align="center" style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"><span style="font-family:'Times New Roman'; font-size:18px">Enable Function-Level Linking</span></p></td><td valign="top"><p align="left" style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"><span style="font-size:18px">告訴編譯器將各個函數按打包格式編譯。</span></p></td></tr><tr><td valign="top"><p align="center" style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"><span style="font-family:'Times New Roman'; font-size:18px">?</span></p><p align="center" style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"><span style="font-family:'Times New Roman'; font-size:18px">Eliminate Duplicate Strings</span></p></td><td valign="top"><p align="left" style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"><span style="font-size:18px">主要用于字符串優化<span style="font-family:'Times New Roman'">(</span>將字符串放到緩充池里以節省空間<span style="font-family:'Times New Roman'">)</span>,使用這個參數,使得:</span></p><p align="left" style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"><span style="font-family:'Times New Roman'; font-size:18px">char *sBuffer = "This is a character buffer";</span></p><p align="left" style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"><span style="font-family:'Times New Roman'; font-size:18px">char *tBuffer = "This is a character buffer";</span></p><p align="left" style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"><span style="font-size:18px"><span style="font-family:'Times New Roman'">sBuffer</span>和<span style="font-family:'Times New Roman'">tBuffer</span>指向的是同一塊內存空間。</span></p></td></tr><tr><td valign="top"><p align="center" style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"><span style="font-family:'Times New Roman'; font-size:18px">Enables minimal rebuild</span></p></td><td valign="top"><p align="left" style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"><span style="font-size:18px">通過保存關聯信息到<span style="font-family:'Times New Roman'">.IDB</span>文件,使編譯器只對最新類定義改動過的源文件進行重編譯,提高編譯速度。</span></p></td></tr><tr><td valign="top"><p align="center" style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"><span style="font-family:'Times New Roman'; font-size:18px">Enable Incremental Compilation</span></p></td><td valign="top"><p align="left" style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"><span style="font-size:18px">同樣通過<span style="font-family:'Times New Roman'">.IDB</span>文件保存的信息,只重編譯最新改動過的函數。</span></p></td></tr><tr><td valign="top"><p align="center" style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"><span style="font-family:'Times New Roman'; font-size:18px">Suppress Startup Banner and Information Messages</span></p></td><td valign="top"><p align="left" style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"><span style="font-size:18px">用以控制參數是否在<span style="font-family:'Times New Roman'">output</span>窗口輸出。</span></p></td></tr></tbody></table> 5. Listing Files 當“Category”一欄選擇“Listing Files”時,界面如圖5所示。其它各欄的介紹如表5所示。 ![](https://box.kancloud.cn/2016-02-24_56cd85c7079c4.jpg) 圖5?“Project Settings”的示意圖5 表5?“Listing Files”下的配置介紹 <table border="1" cellspacing="0" cellpadding="0"><tbody><tr><td valign="top" style="background-color:rgb(204,204,204)"><p align="center" style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"><strong><span style="font-size:18px">名稱</span></strong></p></td><td valign="top" style="background-color:rgb(204,204,204)"><p align="center" style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"><strong><span style="font-size:18px">功能簡介</span></strong></p></td></tr><tr><td valign="top"><p align="center" style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"><span style="font-family:'Times New Roman'; font-size:18px">Generate browse info</span></p></td><td valign="top"><p align="left" style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"><span style="font-size:18px">其功能上面已經提到過,這里可以進行更多的設置。</span></p></td></tr><tr><td valign="top"><p align="center" style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"><span style="font-family:'Times New Roman'; font-size:18px">Exclude Local Variables from Browse Info</span></p></td><td valign="top"><p align="left" style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"><span style="font-size:18px">表示是否將局部變量的信息放到<span style="font-family:'Times New Roman'">.SBR</span>文件中。</span></p></td></tr><tr><td valign="top"><p align="center" style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"><span style="font-family:'Times New Roman'; font-size:18px">Listing file type</span></p></td><td valign="top"><p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"><span style="font-size:18px">可以設置生成的列表信息文件的內容:<span style="font-family:'Times New Roman'">Assembly-Only Listing</span>僅生成匯編代碼文件<span style="font-family:'Times New Roman'">(.ASM</span>擴展名<span style="font-family:'Times New Roman'">)</span>,<span style="font-family:'Times New Roman'">Assembly With Machine Code</span>生成機器代碼和匯編代碼文件<span style="font-family:'Times New Roman'">(.COD</span>擴展名<span style="font-family:'Times New Roman'">)</span>,<span style="font-family:'Times New Roman'">Assembly With Source Code</span>生成源代碼和匯編代碼文件<span style="font-family:'Times New Roman'">(.ASM</span>擴展名<span style="font-family:'Times New Roman'">)</span>,<span style="font-family:'Times New Roman'">Assembly, Machine Code,and Source</span>生成機器碼、源代碼和匯編代碼文件<span style="font-family:'Times New Roman'">(.COD</span>擴展名<span style="font-family:'Times New Roman'">)</span>。</span></p></td></tr><tr><td valign="top"><p align="center" style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"><span style="font-family:'Times New Roman'; font-size:18px">Listing file name</span></p></td><td valign="top"><p align="left" style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"><span style="font-size:18px">為生成的信息文件的路徑,一般為<span style="font-family:'Times New Roman'">Debug</span>或<span style="font-family:'Times New Roman'">Release</span>目錄下,生成的文件名自動取源文件的文件名。</span></p></td></tr></tbody></table> 6.Optimizations 當“Category”一欄選擇“Optimizations”時,界面如圖6所示。其它各欄的介紹如表6所示。 ![](https://box.kancloud.cn/2016-02-24_56cd85c72166f.jpg) 圖6?“Project Settings”的示意圖6 表6?“Optimizations”下的配置介紹 <table border="1" cellspacing="0" cellpadding="0"><tbody><tr><td valign="top" style="background-color:rgb(204,204,204)"><p align="center" style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"><span style="font-size:18px">名稱</span></p></td><td valign="top" style="background-color:rgb(204,204,204)"><p align="center" style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"><span style="font-size:18px">功能簡介</span></p></td></tr><tr><td valign="top"><p align="center" style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"><span style="font-family:'Times New Roman'; font-size:18px">Maximize Speed</span></p></td><td valign="top"><p align="left" style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"><span style="font-size:18px">生成最快速的代碼。</span></p></td></tr><tr><td valign="top"><p align="center" style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"><span style="font-family:'Times New Roman'; font-size:18px">Minimize Size</span></p></td><td valign="top"><p align="left" style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"><span style="font-size:18px">生成最小尺寸的程序。</span></p></td></tr><tr><td valign="top"><p align="center" style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"><span style="font-family:'Times New Roman'; font-size:18px">?</span></p><p align="center" style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"><span style="font-family:'Times New Roman'; font-size:18px">?</span></p><p align="center" style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"><span style="font-family:'Times New Roman'; font-size:18px">?</span></p><p align="center" style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"><span style="font-family:'Times New Roman'; font-size:18px">Customize</span></p></td><td valign="top"><p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"><span style="font-size:18px"><span style="font-family:'Times New Roman'">Assume No Aliasing??????</span>不使用別名<span style="font-family:'Times New Roman'">(</span>提高速度<span style="font-family:'Times New Roman'">)</span>;</span></p><p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"><span style="font-size:18px"><span style="font-family:'Times New Roman'">Assume Aliasing Across Function Calls?</span>僅函數內部不使用別名;</span></p><p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"><span style="font-size:18px"><span style="font-family:'Times New Roman'">Global Optimizations?????</span>全局優化;</span></p><p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"><span style="font-size:18px"><span style="font-family:'Times New Roman'">Generate Intrinsic Functions??</span>使用內部函數替換一些函數調用<span style="font-family:'Times New Roman'">(</span>提高速度<span style="font-family:'Times New Roman'">)</span>;</span></p><p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"><span style="font-size:18px"><span style="font-family:'Times New Roman'">Improve Float Consistency????</span>浮點運算方面的優化;</span></p><p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"><span style="font-size:18px"><span style="font-family:'Times New Roman'">Favor Small Code??</span>程序<span style="font-family:'Times New Roman'">(exe</span>或<span style="font-family:'Times New Roman'">dll)</span>尺寸優化優先于代碼速度優化;</span></p><p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"><span style="font-size:18px"><span style="font-family:'Times New Roman'">Frame-Pointer Omission???????</span>不使用幀指針,以提高函數調用速度;</span></p><p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"><span style="font-size:18px"><span style="font-family:'Times New Roman'">Full Optimization???</span>組合了幾種參數,以生成最快的程序代碼。</span></p></td></tr><tr><td valign="top"><p align="center" style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"><span style="font-family:'Times New Roman'; font-size:18px">?</span></p><p align="center" style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"><span style="font-family:'Times New Roman'; font-size:18px">?</span></p><p align="center" style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"><span style="font-family:'Times New Roman'; font-size:18px">Inline function expansion</span></p></td><td valign="top"><p align="left" style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"><span style="font-size:18px">內聯函數擴展的三種優化<span style="font-family:'Times New Roman'">(</span>使用內聯可以節省函數調用的開銷,加快程序速度<span style="font-family:'Times New Roman'">)</span>:</span></p><p align="left" style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"><span style="font-size:18px"><span style="font-family:'Times New Roman'">Disable</span>不使用內聯;</span></p><p align="left" style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"><span style="font-size:18px"><span style="font-family:'Times New Roman'">Only __inline</span>,僅函數定義前有<span style="font-family:'Times New Roman'">inline</span>或<span style="font-family:'Times New Roman'">__inline</span>標記使用內聯;</span></p><p align="left" style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"><span style="font-size:18px"><span style="font-family:'Times New Roman'">Any Suitable</span>,除了<span style="font-family:'Times New Roman'">inline</span>或<span style="font-family:'Times New Roman'">__inline</span>標記的函數外,編譯器“覺得”應該使用內聯的函數,都使用內聯。</span></p></td></tr></tbody></table> 7.Precompiled Headers 當“Category”一欄選擇“Precompiled Headers”時,界面如圖7所示。 ![](https://box.kancloud.cn/2016-02-24_56cd85c75289a.jpg) 圖7?“Project Settings”的示意圖7 預編譯頭文件的設置。使用預編譯可以提高重復編譯的速度。IDE一般將一些公共的、不大變動的頭文件(比如afxwin.h等)集中放到stdafx.h中,這一部分代碼就不必每次都重新編譯(除非是Rebuild All)。 8.Preprocessor 當“Category”一欄選擇“Preprocessor”時,界面如圖8所示。 ![](https://box.kancloud.cn/2016-02-24_56cd85c769d22.jpg) 圖8?“Project Settings”的示意圖8 可以定義/解除定義一些常量。Additional include directories,可以指定額外的包含目錄,一般是相對于本項目的目錄,如……\\Include。 ### 三、 連接參數的設置 這主要是通過IDE的菜單項“Project->Settings->Link”來完成。 1.General 當“Category”一欄選擇“General”時,界面如圖9所示。 ![](https://box.kancloud.cn/2016-02-24_56cd85c79b45a.jpg) 圖9?“Project Settings”的示意圖9 可以設置生成的文件路徑、文件名,連接的庫文件等。 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 當“Category”一欄選擇“Customize”時,界面如圖10所示。 ![](https://box.kancloud.cn/2016-02-24_56cd85c7c5694.jpg) 圖10?“Project Settings”的示意圖10 在這里可以進行使用程序數據庫文件的設置。 Force File Output:強制產生輸出文件(EXE或DLL)。 Print Progress Messages:可以將連接過程中的進度信息輸出到Output窗口。 3. Debug 當“Category”一欄選擇“Debug”時,界面如圖11所示。 ![](https://box.kancloud.cn/2016-02-24_56cd85c7d979e.jpg) 圖11?“Project Settings”的示意圖11 在這里設置是否生成調試信息,以及調試信息的格式。 格式可以有Microsoft Format、COFF Format(Common Object File Format)和Both Formats三種選擇。 Separate Types表示將Debug格式信息以獨立的.PDB文件存放,還是直接放在各個源文件的.PDB文件中。選中的話,表示采用后者的方式,這種方式調試啟動比較快。 4.Input 當“Category”一欄選擇“Input”時,界面如圖12所示。 ![](https://box.kancloud.cn/2016-02-24_56cd85c802a9b.jpg) 圖12?“Project Settings”的示意圖12 這里可以指定要連接的庫文件和放棄連接的庫文件等。 還可以增加額外的庫文件目錄,一般是相對于本項目的目錄,如..\Lib。 Force Symbol References可以指定連接特定符號定義的庫。 5.Output 當“Category”一欄選擇“Output”時,界面如圖13所示。 ![](https://box.kancloud.cn/2016-02-24_56cd85c834dcd.jpg) 圖13?“Project Settings”的示意圖13 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 界面如圖14所示。 ![](https://box.kancloud.cn/2016-02-24_56cd85c84eee9.jpg) 圖14?“Project Settings”的示意圖14 可以設置連接MFC庫的方式(靜態或動態)。如果是動態連接,在軟件發布時不要忘了帶上MFC的DLL。 2.Project->Settings->Debug 界面如圖15所示。 ![](https://box.kancloud.cn/2016-02-24_56cd85c8640cb.jpg) 圖15?“Project Settings”的示意圖15 可以設置調試時運行的可執行文件,以及命令行參數等。 3.Project->Settings->Custom Build 界面如圖16所示。 ![](https://box.kancloud.cn/2016-02-24_56cd85c87d1aa.jpg) 圖16?“Project Settings”的示意圖16 可以設置編譯/連接成功后自動執行一些操作。比較有用的是,寫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 界面如圖17所示。 ![](https://box.kancloud.cn/2016-02-24_56cd85c8a1dd4.jpg) 圖17?“Options”的示意圖 設置系統的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。 ### 六、總結 “工欲善其事,必先利其器”,熟練掌握工具的用法是對軟件工程師的基本要求。在本人剛接手項目的時候,對于Visual C++不是很熟悉,導致被一位老工程師問得摸不著頭腦。后來,我上網查了一點資料,發現自己以前對于Visual C++知之甚少。雖然現在很多開發工程師不用該軟件編程,但了解其用法對于開發工程師還是很有好處的。 希望該文能夠對大家有所裨益。 ### 七、參考資料 1.Visual C++編譯器常用選項設置,[http://developer.51cto.com/art/200901/106017.htm](http://developer.51cto.com/art/200901/106017.htm)。 2.Microsoft Visual C++,[http://baike.baidu.com/view/100377.htm](http://baike.baidu.com/view/100377.htm)。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看