C/C++屬性頁
下列屬性頁位於 [項目>屬性組態屬性>>C/C++] 底下:
C/C++ 一般屬性
其他 Include 目錄
指定一或多個要新增至 Include 路徑的目錄。 如果有一個以上的目錄,請以分號分隔目錄('';
)。 /I
設定 [其他包含目錄] 編譯程序選項。
其他 #using 目錄
指定要搜尋的一或多個目錄,以解析傳遞至 #using
指示詞的名稱。 如果有一個以上的目錄,請以分號分隔目錄('';
)。 設定編譯程序 /AI
選項。
其他 BMI 目錄
指定要搜尋的一或多個目錄,以解析傳遞至 import
指示詞的名稱。 如果有一個以上的目錄,請以分號分隔目錄('';
)。 設定編譯程序 /ifcSearchDir[path]
選項。
其他模組相依性
指定要用來解析傳遞至 指示詞之名稱的 import
一或多個模組。 如果有一個以上的目錄,請以分號分隔目錄('';
)。 設定編譯程序 /reference
選項。
其他標頭單位相依性
指定要用來解析傳遞至標頭指示詞之名稱的 import
一或多個標頭單位。 如果有一個以上的目錄,請以分號分隔目錄('';
)。 設定編譯程序 /headerUnit
選項。
掃描模組相依性的來源
當設定為 [ 是] 時,編譯程式會掃描所有C++來源,而不只是模組介面和標頭單位來源,以取得模組和標頭單位相依性。 建置系統會建置完整的相依性圖形,這可確保所有匯入的模組和標頭單位都是在編譯相依於它們的檔案之前建置的。 結合 Translate Includes to Imports 時,與頭檔相同目錄中指定 header-units.json
的任何頭文件會編譯成標頭單位。
一律會掃描擴展名.ixx
為 的檔案,以及其 File 屬性> C/C++Compile As 屬性設定為 [編譯為 C++>頁首單位 /exportHeader] 的檔案。
將 Include 轉譯為匯入
當設定為 [是] 時,如果符合特定條件,編譯程式會將 指示import
詞視為#include
指示詞:頭檔是在相同目錄中的檔案中header-units.json
指定,而已編譯的頭文件單位(檔案.ifc
)則可供頭檔使用。 否則,頭檔會被視為一般 #include
。 檔案 header-units.json
可用來建置每個 #include
標頭單位,而不重複符號。 與 模組相依性的掃描來源結合時,編譯程式會自動尋找可編譯成標頭單位的所有頭檔。 此屬性會設定編譯 /translateInclude
程序選項。
偵錯資訊格式
指定編譯器所產生的偵錯資訊類型。 此屬性需要相容的連結器設定。 設定 /Z7
、 /Zi
、 /ZI
(偵錯資訊格式) 編譯程式選項。
選項
- 無 - 因為不產生任何偵錯資訊,所以編譯速度會較快。
- C7 相容 - 選取為程式建立的偵錯資訊類型,以及此資訊是否保留在物件 (.obj) 檔案或程式資料庫 (PDB) 中。
- Program Database - 產生程式資料庫 (PDB),其中包含類型資訊和符號偵錯資訊,以搭配調試程式使用。 符號偵錯資訊包括變數和函式的名稱和類型,以及行號。
- Program Database for Edit And Continue - 產生程序資料庫,如先前所述,採用支援 編輯後繼續 功能的格式。
僅支援我的程式代碼偵錯
新增支援程序代碼,以在此編譯單元中啟用 Just My Code 偵錯。 設定 /JMC
。
Common Language RunTime 支援
使用 .NET 運行時間服務。 此參數與其他一些交換器不相容;如需詳細資訊, /clr
請參閱參數系列的檔。
選項
- 沒有 Common Language RunTime 支援 - 沒有 Common Language RunTime 支援
- Common Language RunTime 支援 - 為您的應用程式建立可由其他 CLR 應用程式取用的元數據。 也可讓您的應用程式在其他 CLR 元件的元數據中取用類型和數據。
- 純 MSIL Common Language RunTime 支援 - 產生 不含原生可執行程式代碼的 MSIL 輸出檔,不過它可以包含編譯為 MSIL 的原生類型。
- 安全 MSIL Common Language RunTime 支援 - 產生僅限 MSIL(沒有原生可執行程式碼)和可驗證的輸出檔。
取用 Windows 執行階段擴充功能
使用 Windows 執行時間語言延伸模組。 設定 /ZW
。
隱藏啟動橫幅
當編譯程式啟動並顯示資訊訊息時,隱藏登入橫幅的顯示。
警告層級
選取您希望編譯器針對程式碼錯誤所產生的嚴謹度等級。 設定 /W0
- /W4
。
選項
- 關閉所有警告 - 層級 0 會停用所有警告。
- Level1 - 層級 1 會顯示嚴重警告。 層級 1 是命令行的預設警告層級。
- Level2 - 層級 2 會顯示低於層級 1 的所有層級 1 警告和警告。
- 層級 3 - 層級 3 會顯示所有層級 2 警告,以及針對生產用途建議的所有其他警告。
- Level4 - 層級 4 會顯示所有層級 3 警告加上參考警告,在大部分情況下可以安全地忽略。
- EnableAllWarnings - 啟用所有警告,包括預設停用的警告。
將警告視為錯誤
將編譯程式警告視為錯誤。 對於新專案,最好 /WX
在每次編譯中使用。 解決所有警告,以將難以尋找的程式代碼瑕疵降至最低。
警告版本
隱藏特定版本編譯程式之後引進的警告。 設定 /Wv:xx[.yy[.zzzzz]]
。
診斷格式
啟用豐富的診斷,並在診斷訊息中使用數據行資訊和來源內容。
選項
- 插入點 - 提供診斷訊息中的數據行資訊。 而且,使用指出違規數據行的插入號輸出相關的原始碼行。
- 數據行資訊 - 此外,請在發出診斷的行內提供數據行編號,如果適用的話。
- 傳統 - 僅輸出具有行號的先前簡潔診斷訊息。
SDL 檢查
其他安全性開發生命週期 (SDL) 建議檢查;包括啟用額外的安全程式代碼產生功能,並啟用額外的安全性相關警告作為錯誤。 設定 /sdl
、 /sdl-
。
多處理器編譯
啟用多處理器編譯。 設定編譯程序 /MP
選項。
啟用位址清理程式
編譯程式,並使用 AddressSanitizer 檢測連結程式。 此屬性目前支援 x86 和 x64 目標組建。 設定編譯程序 /fsanitize
選項。
C/C++ 優化屬性
最佳化
選取程式代碼優化選項;選擇 [自定義] 以使用特定的優化選項。 設定 /Od
、 /O1
、 /O2
。
選項
- 自訂 - 自訂最佳化。
- 停用 - 停用最佳化。
- 優化上限 (偏好大小) - 相當於
/Os /Oy /Ob2 /Gs /GF /Gy
- 最大優化 (偏向速度) - 相當於
/Oi /Ot /Oy /Ob2 /Gs /GF /Gy
- 優化 (偏向速度) - 相當於
/Oi /Ot /Oy /Ob2
內嵌函式展開
選項
- Default
- Disabled - 停用預設開啟的內嵌展開。
- 僅__inline - 只展開標示為
inline
、__forceinline
或__inline
的函式。 或者,在類別宣告內定義的C++成員函式中。 - 任何適合 - 展開標示為
inline
或 的__inline
函式,以及編譯程序選擇的任何其他函式。 (擴充發生在編譯程式的任意裁量,通常稱為 自動內嵌。
啟用內部函數
啟用內部函數。 使用內部函數會產生更快的程序代碼,但可能更大。 設定 /Oi
。
偏好大小或速度
是否偏好程式代碼大小或程序代碼速度;必須開啟 「全域優化」。 設定 /Ot
、 /Os
。
選項
- 偏好小型程式代碼 - 藉由指示編譯程式優先於速度,將 EXE 和 DLL 的大小降到最低。
- 偏好快速程式代碼 - 藉由指示編譯程式優先於大小,將 EXE 和 DLL 的速度最大化。 (此值為預設值。
- 兩者 都不是 - 沒有大小和速度優化。
省略框架指標
在呼叫堆疊上隱藏框架指標的建立。
啟用光纖安全優化
使用光纖和線程本機記憶體存取時,啟用記憶體空間優化。 設定 /GT
。
整個程式最佳化
藉由延遲產生程式代碼以連結時間來啟用跨模塊優化。 需要連結器選項 [鏈接時間程式代碼產生]。 設定 /GL
。
C/C++預處理器屬性
前置處理器定義
定義原始程式檔的前置處理符號。
取消前置處理器的定義
指定取消一或多個前置處理器的定義。 設定 /U
。
取消所有前置處理器的定義
取消所有先前定義的前置處理器值。 設定 /u
。
忽略標準 Include 路徑
防止編譯程式在 INCLUDE 環境變數中指定的目錄中搜尋 include 檔案。
前置處理至檔案
前置處理 C 和 C++原始程式檔,並將前置處理的輸出寫入檔案。 此選項會隱藏編譯,而且不會產生 .obj
檔案。
前置處理隱藏行號
前置處理不含 #line 指示詞。
保留批注
隱藏原始碼的批注等量;需要至少設定其中一個 前置處理 選項。 設定 /C
。
C/C++程式代碼產生屬性
啟用字串共用
編譯程式只會在程式映像中建立一個相同字串的唯讀複本。 其會產生較小的程式,稱為 字串共用的優化。 /O1
、 /O2
和 /ZI
自動設定 /GF
選項。
啟用最小重建
啟用最小重建,這會決定是否重新編譯C++包含已變更C++類別定義的原始程序檔,並儲存在頭 .h
檔中。
啟用 C++ 例外狀況
指定編譯器所使用的例外狀況處理模型。
選項
- 是,SEH 例外狀況 - 攔截異步(結構化)和同步(C++)例外狀況的例外狀況處理模型。 設定
/EHa
。 - 是 - 只攔截C++例外狀況的例外狀況處理模型,並指示編譯程序假設 extern C 函式永遠不會擲回C++例外狀況。 設定
/EHsc
。 - 是,使用 Extern C 函 式 - 只攔截C++例外狀況的例外狀況處理模型,並指示編譯程式假設 extern C 函式確實會擲回例外狀況。 設定
/EHs
。 - 否 - 沒有例外狀況處理。
較小的類型檢查
啟用檢查是否轉換成較小的類型,與偵錯以外的任何優化類型不相容。 設定 /RTCc
。
基本執行階段檢查
啟用基本運行時間錯誤檢查,與偵錯以外的任何優化類型不相容。 設定 /RTCs
、 /RTCu
、 /RTC1
。
選項
- 堆疊框架 - 啟用堆疊框架運行時間錯誤檢查。
- 未初始化的變數 - 在未初始化的情況下使用變數時報告。
- 兩者 (/RTC1,等同於 /RTCsu) - 相當於
/RTCsu
。 - 預設值 - 預設運行時間檢查。
執行階段程式庫
指定連結的執行階段程式庫。 設定 、、/MD
/MTd
、。/MT
/MDd
選項
- 多線程 - 讓您的應用程式使用運行時間連結庫的多線程靜態版本。
- 多線程偵錯 - 定義
_DEBUG
和_MT
。 這個選項也會讓編譯程式將連結庫名稱LIBCMTD.lib
放入檔案中.obj
,讓連結器用來LIBCMTD.lib
解析外部符號。 - 多線程 DLL - 讓您的應用程式使用運行時間連結庫的多線程和 DLL 特定版本。
_MT
定義 和_DLL
,並讓編譯程式將連結庫名稱 MSVCRT.lib.obj
放入檔案中。 - 多線程偵錯 DLL - 定義
_DEBUG
、_MT
和_DLL
,並讓應用程式使用運行時間連結庫的多線程和 DLL 特定版本。 它也會讓編譯程式將連結庫名稱MSVCRTD.lib
放入檔案中.obj
。
結構成員對齊
指定結構成員對齊的 1、2、4 或 8 位元組界限。 設定 /Zp
。
選項
- 1 位元組 - 封裝一個字節界限上的結構。 與
/Zp
相同。 - 2 位元組 - 封裝兩位元組界限上的結構。
- 4 位元組 - 封裝四位元組界限上的結構。
- 8 位元組 - 封裝八位元組界限上的結構(預設值)。
- 16 個字節 - 在 16 位元組界限上封裝結構。
- 預設值 - 預設對齊設定。
安全性檢查
安全性檢查可協助偵測是否發生堆疊緩衝區滿溢的情況,這是駭客經常嘗試攻擊的程式安全性漏洞。
選項
控制流程防護
防護安全性檢查可協助偵測分派至非法程式代碼區塊的嘗試。
選項
- 是 - 使用防護集
/guard:cf
啟用安全性檢查。 - 否
啟用函式階層連結
允許編譯器以封裝函式 (COMDAT) 的形式來封裝個別函式。 需要此項目才能使用編輯後繼續功能。 設定 /Gy
。
啟用平行程式代碼產生
允許編譯程式針對啟用優化時使用 #pragma loop(hint_parallel[(n)])
識別的循環產生平行程序代碼。
啟用增強指令集
啟用在支援增強指令集的處理器上使用指示。 例如,SSE、SSE2、AVX 和 AVX2 對 IA-32 的增強功能。 而且,X64 的 AVX 和 AVX2 增強功能。 /arch:SSE2
目前 /arch:SSE
和僅適用於建置 x86 架構時。 如果未指定任何選項,編譯程式會使用在支援 SSE2 的處理器上找到的指示。 您可以使用 停用 /arch:IA32
增強的指示。 如需詳細資訊,請參閱/arch (x86)
, /arch (x64)
, /arch (ARM64)
和/arch (ARM)
.
選項
- 串流 SIMD 擴充 功能 - 串流 SIMD 擴充功能。 集
/arch:SSE
- 串流 SIMD 擴充功能 2 - 串流 SIMD 擴充功能 2。 集
/arch:SSE2
- 進階向量延伸 - 進階向量延伸。 集
/arch:AVX
- 進階向量延伸模組 2 - 進階向量延伸模組 2。 集
/arch:AVX2
- 沒有增強的 指示 - 沒有增強的指示。 集
/arch:IA32
- 未設定 - 未設定。
浮點模型
設定浮點模型。 設定 /fp:precise
、 /fp:strict
、 /fp:fast
。
選項
- 精確 - 預設值。 改善浮點測試是否相等和不相等的一致性。
- Strict - 最嚴格的浮點模型。
/fp:strict
導致fp_contract
為 OFF 且fenv_access
為 ON。/fp:except
是隱含的,而且可以藉由明確指定/fp:except-
來停用。 搭配/fp:except-
使用 時,/fp:strict
會強制執行嚴格的浮點語意,但不尊重例外事件。 - Fast - 在大部分情況下建立最快的程序代碼。
啟用浮點例外狀況
可靠的浮點例外狀況模型。 例外狀況會在觸發后立即引發。 設定 /fp:except
。
建立可熱修補的映像
當熱修補開啟時,編譯程式可確保每個函式的第一個指令是兩個字節,因為熱修補是必要的。 設定 /hotpatch
。
Spectre 風險降低
CVE 2017-5753 的Spectre風險降低措施。 設定 /Qspectre
。
選項
- 已啟用 - 啟用 CVE 2017-5753 的 Spectre 風險降低功能
- 已停用 - 未設定。
C/C++ 語言屬性
停用語言延伸模組
隱藏或啟用語言延伸模組。 設定 /Za
。
將WChar_t視為內建類型
指定時,型 wchar_t
別會變成對應至 __wchar_t
的原生型別,其方式與 short
對應至 __int16
相同。 /Zc:wchar_t
。
在 For 循環範圍中強制一致性
針對具有Microsoft延伸模組的 for
語句循環,實作標準C++行為。 設定 /Za
、 /Ze
(停用語言延伸模組。 /Zc:forScope
。
拿掉未參考的程式代碼和數據
指定時,編譯程式不會再針對未參考的程式代碼和數據產生符號資訊。
強制型別轉換規則
用來根據 C++11 標準,將右值參考型別識別為轉換作業的結果。
啟用執行階段類型資訊
新增程式代碼,以在運行時間檢查C++物件類型(運行時間類型資訊或 RTTI)。 設定 /GR
、 /GR-
。
開啟 MP 支援
啟用 OpenMP 2.0 語言延伸模組。 設定 /openmp
。
C + + 語言標準
判斷編譯程式啟用C++語言標準。 默認值未設定標準選項,因此編譯程式會使用其預設C++14 設定。 如果您選取特定值,對應的 /std
編譯程式選項會 set.md)。
選項
- 預設值 (ISO C++14 標準)
- ISO C++14 標準 (/std:c++14)
- ISO C++17 標準 (/std:c++17)
- ISO C++20 Standard (/std:c++20)
- 預覽 - 最新C++工作草稿的功能(/std:c++latest)
C 語言標準
判斷編譯程式啟用的 C 語言標準。 默認值不會設定標準選項,因此編譯程式會使用其預設的舊版 MSVC 設定。 如果您選取特定值,對應的 /std
編譯程式選項會 set.md)。
選項
- 預設 (舊版 MSVC)
- ISO C11 標準 (/std:c11)
- ISO C17 (2018) 標準 (/std:c17)
一致性模式
啟用或隱藏一致性模式。 設定 /permissive-
。
啟用實驗性C++標準連結庫模組
C++模組 TS 和標準連結庫模組的實驗性支援。
建置 ISO C++23 標準連結庫模組
從 Visual Studio 17.6 開始,當啟用此屬性並 設定為 C++ Language Standard /std:c++latest
時,Visual C++ 專案會自動尋找並建置 ISO C++23 標準連結庫模組。 這可讓您 import std
在程式代碼中或 import std.compat
C++程式代碼中。
C/C++先行編譯標頭屬性
建立/使用先行編譯標頭
啟用在建置期間建立或使用先行編譯標頭檔。 設定 /Yc
、 /Yu
。
選項
- 建立 - 指示編譯程式建立代表特定時間點編譯狀態的先行編譯標頭 (
.pch
) 檔案。 - 使用 - 指示編譯程式在目前的編譯中使用現有的先行編譯頭 (
.pch
) 檔案。 - 不使用先行編譯標頭 - 不使用先行編譯標頭。
先行編譯標頭檔
指定建立或使用先行編譯頭檔時要使用的頭文件名稱。 設定 /Yc
、 /Yu
。
先行編譯頭檔
指定所產生先行編譯頭文件的路徑或名稱。 設定 /Fp
。
C/C++輸出檔屬性
展開屬性化來源
使用插入原始程式檔的擴充屬性建立清單檔案。 設定 /Fx
。
組合語言輸出
指定組合語言輸出檔案的內容。 設定 、、/FAs
/FAc
、。/FA
/FAcs
選項
- 無清單 - 沒有清單。
- 僅限元件清單 - 元件程序代碼;
.asm
- 使用機器碼 的元件 - 計算機和元件程式代碼;
.cod
- 具有原始碼 的元件 - 原始程式碼和元件碼;
.asm
- 元件、機器碼和原始程式碼 - 元件、機器碼和原始程式碼;
.cod
使用 Unicode 進行組合器清單
使輸出檔案以UTF-8格式建立。
ASM 清單位置
指定 ASM 清單檔案的相對路徑或名稱;可以是檔案或目錄名稱。 設定 /Fa
。
目的檔名稱
指定要覆寫預設物件檔案名稱的名稱;可以是檔案或目錄名稱。 設定 /Fo
。
Program Database File Name
指定編譯程式產生的 PDB 檔案名稱;也會指定必要編譯程序產生的IDB檔案的基底名稱;可以是檔案或目錄名稱。 設定 /Fd
。
產生 XML 檔檔
指定編譯程式應該產生 XML 檔批注檔案 (。XDC)。 設定 /doc
。
XML 檔案檔名稱
指定產生的 XML 檔案檔名稱;可以是檔案或目錄名稱。 設定 /doc:
<名稱>。
C/C++瀏覽資訊屬性
啟用瀏覽資訊
指定檔案中的 .bsc
瀏覽資訊層級。 設定 /FR
。
瀏覽資訊檔
指定瀏覽器資訊檔案的選擇性名稱。 設定 /FR
<名稱>。
外部包含
將角括號隨附的檔案視為外部
指定是否要將角括弧隨附的檔案視為外部。 將此屬性設定為 [是 ] 以設定編譯 /external:anglebrackets
程序選項。
外部標頭警告層級
選取您希望編譯程式對外部標頭中的程式代碼錯誤有多嚴格。 此屬性會設定編譯 /external:Wn
程序選項。 如果此值設定為 [繼承專案警告層級 ] 或預設值,則會忽略其他 /external
選項。
外部標頭中的範本診斷
指定是否要跨範本具現化鏈結評估警告層級。 將此屬性設定為 [是 ] 以設定編譯 /external:templates-
程序選項。
停用外部標頭的程式代碼分析
停用外部標頭的程式代碼分析。 設定編譯程序 /analyze:external-
選項。
外部標頭的分析規則集
指定外部標頭的程式代碼分析規則集覆寫。 如果未指定,則會使用程式代碼分析設定。 設定編譯程序 /analyze:external:ruleset path
選項。
C/C++ 進階屬性
呼叫慣例
選取應用程式的預設呼叫慣例(可由函式覆寫)。 設定 、、/Gz
/Gr
、。/Gd
/Gv
選項
__cdecl
- 指定__cdecl
所有函式的呼叫慣例,但C++成員函式和標示__stdcall
為 或__fastcall
的函式除外。__fastcall
- 指定__fastcall
所有函式的呼叫慣例,但C++成員函式和標示__cdecl
為 或__stdcall
的函式除外。 所有__fastcall
函式都必須有原型。__stdcall
- 指定__stdcall
所有函式的呼叫慣例,但C++成員函式和標示__cdecl
為 或__fastcall
的函式除外。 所有__stdcall
函式都必須有原型。__vectorcall
- 指定__vectorcall
所有函式的呼叫慣例,但C++成員函式和標示__cdecl
為 、__fastcall
或__stdcall
的函式除外。 所有__vectorcall
函式都必須有原型。
編譯為
選取原始程式檔的編譯語言選項。 設定 /TC
、、/TP
/interface、/internalPartition
或/exportHeader
選項。
選項
- 預設 - 預設值。
- 編譯為 C 程式代碼 (
/TC
) - 將指定的原始程式檔編譯為 C 程式代碼。 根據預設,擴展名為.c
C 的檔案會編譯為 C。 - 編譯為C++程序代碼 (
/TP
) - 將指定的原始程式檔編譯為程式代碼C++。 根據預設,沒有.c
、、.ixx
、.cppm
.h
或 沒有擴展名的所有原始程式檔都會編譯為C++。 - 編譯為C++模組程序代碼 (
/interface
) - 將指定的原始程式檔編譯為C++模組程序代碼。 根據預設,具有.ixx
或.cppm
擴展名的檔案會編譯為模組程序代碼C++。 - 編譯為C++模組內部分割區 (
/internalPartition
) - 將指定的原始程式檔編譯為C++模組內部分割區。 - 編譯為C++標頭單位 (
/exportHeader
) - 將指定的原始程序檔編譯為C++標頭單位。 根據預設,擴展名.h
或沒有擴展名的檔案會編譯為標頭單位。
停用特定警告
停用指定的警告編號。 將警告編號放在分號分隔清單中。 設定 /wd
<數位>。
強制包含檔案
一或多個強制 Include 檔案。 設定 /FI
<名稱>。
強制 #using 檔案
指定一或多個強制 #using 檔案。 設定 /FU
<名稱>。
顯示 Include
產生 Include 檔清單以及編譯器輸出。 設定 /showIncludes
。
使用完整路徑
在診斷訊息中使用完整路徑。 設定 /FC
。
省略默認連結庫名稱
不包含檔案中的 .obj
默認連結庫名稱。 設定 /Zl
。
報告內部編譯器錯誤
注意
即將淘汰此選項。 從 Windows Vista 開始,錯誤報告是由 Windows 錯誤報告 (WER) 設定所控制。
將特定警告視為錯誤
將特定編譯程式警告視為錯誤,其中 n 是編譯程式警告。
其他選項
其他選項。