代碼生成:
啓用字符串池:容許編譯器在執行過程當中,在程序影像和內存中建立相同字符串的單個只讀副本,從而生成較小的程序。
啓用最小從新生成:
在首次編譯期間,編譯器在項目的.idb文件中存儲源文件和類定義之間的依賴關係信息。 (依賴關係信息代表每一個源文件所依賴的類定義以及該定義位於哪一個.h 文件中。)後面的編譯使用存儲在.idb 文件中的信息肯定是否須要編譯某個源文件(即便它包含已修改的 .h 文件)。
最小從新生成依賴於類定義不會在包含文件之間更改。類定義對於項目必須是全局的(對於給定類應只有一個定義),由於.idb 文件中的依賴關係信息是爲整個項目建立的。若是項目中的某個類有多個定義,請禁用最小從新生成。
因爲增量連接器不支持經過使用 /ZW(Windows 運行時編譯) 選項將 Windows 元數據包含在 .obj 文件中,所以 /Gm 選項與 /ZW 不兼容。
啓用C++異常:/EH{s|a}[c][r][-]
a
同時捕獲異步(結構化)和同步 (C++) 異常的異常處理模型。
s
僅捕獲 C++ 異常並通知編譯器假定聲明爲 extern "C" 的函數可能引起異常的異常處理模型。
c
若是與 s (/EHsc) 一塊兒使用,則僅捕獲 C++ 異常並通知編譯器假定聲明爲 extern "C" 的函數從未引起 C++ 異常。
/EHca 與 /EHa 相等。
r
告知編譯器始終爲全部 noexcept 函數生成運行時終止檢查。 默認狀況下,若是編譯器肯定該函數僅調用非引起函數,則運行時檢查 noexcept 可能被優化掉。
較小類型檢查:啓動或禁用運行時檢測功能
基本運行時檢測:
運行庫:
/MD[d]
/ML[d]
/MT[d]
/LD[d]
選項
說明
/MD 定義_MT和_DLL以便同時從標準.h文件中選擇運行時例程的多線程特定版本和 DLL 特定版本。
此選項還使編譯器將庫名 MSVCRT.lib 放入 .obj 文件中。
用此選項編譯的應用程序靜態連接到 MSVCRT.lib。該庫提供容許連接器解析外部引用的代碼層。
實際工做代碼包含在 MSVCR71.DLL 中,該庫必須在運行時對於與 MSVCRT.lib 連接的應用程序可用。
/MDd
定義 _DEBUG、_MT 和 _DLL,以便從標準 .h 文件中選擇運行時例程的調試多線程特定版本和 DLL 特定版本。
它還使編譯器將庫名 MSVCRTD.lib 放入 .obj 文件中。
/ML
使編譯器將庫名 LIBC.lib 放入 .obj 文件中,以便連接器使用 LIBC.lib 解析外部符號。
這是編譯器的默認操做。LIBC.lib 不提供多線程支持。
/MLd
定義 _DEBUG 並使編譯器將庫名 LIBCD.lib 放入 .obj 文件中,以便連接器使用 LIBCD.lib 解析外部符號。
LIBCD.lib 不提供多線程支持。
/MT
定義 _MT,以便從標準頭 (.h) 文件中選擇運行時例程的多線程特定版本。
此選項還使編譯器將庫名 LIBCMT.lib 放入 .obj 文件中,以便連接器使用 LIBCMT.lib 解析外部符號。
建立多線程程序須要 /MT 或 /MD(或它們的調試等效選項 /MTd 或 /MDd)。
/MTd
定義 _DEBUG 和 _MT。定義 _MT 會致使從標準 .h 文件中選擇運行時例程的多線程特定版本。
此選項還使編譯器將庫名 LIBCMTD.lib 放入 .obj 文件中,以便連接器使用 LIBCMTD.lib 解析外部符號。
建立多線程程序須要 /MTd 或 /MDd(或它們的非調試等效選項 /MT 或 MD)。
/LD
建立 DLL。將 /DLL 選項傳遞到連接器。連接器查找 DllMain 函數,但並不須要該函數。
若是沒有編寫 DllMain 函數,連接器將插入返回 TRUE 的 DllMain 函數。
連接 DLL 啓動代碼。
若是命令行上未指定導出 (.exp) 文件,則建立導入庫 (.lib);將導入庫連接到調用您的 DLL 的應用程序。
將 /Fe 解釋爲命名 DLL 而不是 .exe 文件;默認程序名成爲基名稱.dll 而不是基名稱.exe。
若是還未顯式指定 /M 選項之一,則將默認運行時庫支持更改成 /MT。
/LDd
建立調試 DLL。定義 _DEBUG。
結構成員對齊 /Zp[1|2|4|8|16]
當指定此選項時,第一個結構成員後的每一個結構成員將存儲在成員類型大小或 n 字節邊界(其中 n 爲 一、二、四、8 或 16)二者中較小的一個邊界上。
下表描述了可用的值。
1針對 1 字節邊界將結構打包。 與 /Zp 相同。
2針對 2 字節邊界將結構打包。
4針對 4 字節邊界將結構打包。
8針對 8 字節邊界將結構打包(默認設置)。
16針對 16 字節邊界將結構打包。
除非有特定的對齊要求,不然不該使用此選項。
安全檢查 /GS[-]
默認狀況下,/GS 處於打開狀態。 若是但願應用程序不出現安全漏洞,請使用 /GS-。
啓用函數級連接 /Gy[-]
連接器要求單獨打包爲 COMDAT 的函數在 DLL 或 .exe 文件中排除或安排各個函數。
可使用連接器選項 /OPT(優化) 從 .exe 文件中排除未引用的封裝函數。
可使用連接器選項 /ORDER(按順序放置函數)按指定順序將封裝函數包括在 .exe 文件中。
若是內聯函數做爲調用進行實例化(例如,當關閉內聯或獲取函數地址時出現這種狀況),則始終打包內聯函數。 另外,在類聲明內部定義的 C++ 成員函數會自動打包;其餘函數不會如此,因此須要選擇此選項以便將它們做爲封裝函數編譯。
用於「編輯並繼續」的 /ZI 選項會自動設置 /Gy 選項。
啓用並行代碼生成
當編譯器自動對循環進行並行化代碼,它在多個處理器內核之間分佈的計算。 循環並行化僅當編譯器肯定它是以合法的方式執行,而且並行化會提升性能。
啓用加強指令集
根據具體硬件的特性選擇對應的CPU指令集,能夠最優化速度。
浮點模型 /fp:[precise | except[-] | fast | strict ]
經過禁用可更改浮點計算精度的優化,可提升等式和不等式的浮點測試的一致性。
啓用浮點異常
可靠的浮點異常模型。 異常在觸發後當即引起。 默認狀況下關閉此選項。 將減號追加到此選項將顯式禁用它。
建立可熱修補映像 /hotpatch
當 /hotpatch 用於編譯時,編譯器確保每一個函數的第一個指令爲至少兩個字節,這是熱修補的要求。安全
===============================================================================
語言
![](http://static.javashuo.com/static/loading.gif)
禁用語言擴展 /Za Visual C++ 編譯器提供許多在 ANSI C 或 ANSI C++ 標準中指定的那些功能之外的功能。 這些功能統稱爲 C 和 C++ 的 Microsoft 擴展。 這些擴展在指定 /Za 選項時不可用。 若是打算將程序移植到其餘環境,請禁用語言擴展。 將WChar_t視爲內置類型 /Zc:wchar_t[-] 若是 /Zc:wchar_t 處於打開狀態,wchar_t 將映射到 Microsoft 專用本機類型 __wchar_t。 若是指定了 /Zc:wchar_t-(帶有一個減號),wchar_t 將映射到 unsigned short 的 typedef。 C++ 標準要求 wchar_t 是內置類型。 強制For循環範圍中的合規性 /Zc:forScope[-] 就是決定變量在超出for循環以後,是否還存在 啓用運行時類型信息 /GR[-] 當 /GR 啓用時,編譯器將定義 _CPPRTTI 預處理器宏。 默認狀況下,/GR 處於打開狀態。 /GR- 將禁用運行時類型信息。 若是編譯器沒法在代碼中靜態解析對象類型,則使用 /GR。 當代碼使用 dynamic_cast 運算符 或 typeid 時,一般須要 /GR 選項。 可是,/GR 會致使映像的 .rdata 節增大。 若是您的代碼不使用 dynamic_cast 或 typeid,則使用 /GR- 可能會生成較小的映像。 OpenMP支持 #pragma omp 用於指定 Directives 和 Clauses。 若是未在編譯中指定 /openmp,編譯器將忽略 OpenMP 子句和指令。 即便未指定 /openmp,OpenMP 函數調用也由編譯器處理。