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 的速度最大化。 (此值為預設值。
- 兩者 都不是 - 沒有大小和速度優化。
省略框架指標
在呼叫堆疊上隱藏框架指標的建立。
啟用 Fiber-保管庫 優化
使用光纖和執行緒本機儲存體存取時,啟用記憶體空間優化。 設定 /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
、 /MDd
。 /MT
選項
- 多執行緒 - 讓您的應用程式使用執行時間程式庫的多執行緒靜態版本。
- 多執行緒偵錯 - 定義
_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 Standard (/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++ 語言標準 設定為 /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
、 /FAcs
。 /FA
選項
- 無清單 - 沒有清單。
- 僅限元件清單 - 元件程式碼;
.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
、 /Gv
。 /Gd
選項
__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 是編譯器警告。
其他選項
其他選項。