下列屬性頁位於 項目>屬性>組態屬性>C/C++:
C/C++ 一般性質
其他包含目錄
指定一或多個要新增至 Include 路徑的目錄。 如果目錄多於一個,則用分號(;)分開。 設定 /I (其他包含目錄) 編譯程序選項。
其他 #using 目錄
指定要搜尋的一或多個目錄,以解析傳遞至 #using 指示詞的名稱。 如果你加了多個目錄,請用分號();分開。 設定編譯程序 /AI 選項。
其他 BMI 目錄
指定一個或多個目錄來搜尋,以解析傳遞至 import 指令的名稱。 如果你加了多個目錄,請用分號();分開。 設定編譯程序 /ifcSearchDir[path] 選項。
其他模組相依性
指定一個或多個模組用於解析傳遞到 import 指令的名稱。 如果你加了多個目錄,請用分號();分開。 設定編譯程序 /reference 選項。
其他標頭單位相依性
指定一個或多個標頭單位,作為解析傳遞至 import 標頭指示詞的名稱之用。 如果你加了多個目錄,請用分號();分開。 設定編譯程序 /headerUnit 選項。
掃描模組相依性的來源
當此屬性設為 「是」時,編譯器會掃描所有 C++ 原始碼,不僅限於模組介面與標頭單元來源,以尋找模組與標頭單元的相依關係。 建置系統會建置完整的相依性圖形,這可確保所有匯入的模組和標頭單位都是在編譯相依於它們的檔案之前建置的。 當 掃描原始檔中的模組相依性 與 將 include 轉譯為 import 都設為 是 時,任何在與該標頭檔相同目錄中的 header-units.json 檔案裡所指定的標頭檔,都會被編譯為標頭單元。
副檔名為 .ixx 的檔案,以及其檔案屬性>中的 C/C++>Advanced>Compile As 屬性設為 Compile as C++ Header Unit (/exportHeader) 的檔案,一律會被掃描。
一律會掃描副檔名為.ixx的檔案,以及檔案屬性中的檔案屬性>C/C++>以 C++ 標頭單元編譯屬性設定為以 C++ 標頭單元編譯 (/exportHeader)的檔案。
將「Include」翻譯為「匯入」
當此屬性設為 「是」時,編譯器會將指令 #include 視為 import 指令,前提是符合某些條件:標頭檔在同一目錄的檔案 header-units.json 中指定,且標頭檔有編譯後的標頭單元(檔案 .ifc )。 否則,頭檔會被視為一般 #include。 檔案 header-units.json 可用來建置每個 #include 標頭單位,而不重複符號。 當 將 Include 轉譯為 Import 與 掃描原始程式碼中的模組相依性 皆設為 是 時,編譯器會自動找出所有可編譯為標頭單元的標頭檔。 此屬性會設定編譯 /translateInclude 程序選項。
偵錯資訊格式
指定編譯器所產生的偵錯資訊類型。 此屬性需要相容的連結器設定。 設定 /Z7、 /Zi、 /ZI (偵錯資訊格式) 編譯程式選項。
選項
-
None (
None) - 不產生除錯資訊,編譯可能更快。 -
C7 兼容 軟體(
OldStyle)- 產生包含完整符號除錯資訊的物件檔。 不會產生任何 PDB 檔案。 -
程式資料庫 (
ProgramDatabase) - 產生包含型別資訊及符號除錯資訊的程式資料庫(PDB),供除錯器使用。 符號偵錯資訊包括變數和函式的名稱和類型,以及行號。 - 程式資料庫(Program Database for Edit And Continue)()- 如前所述,產生支援
EditAndContinue功能的程式資料庫。
支援「Just My Code」偵錯
新增支援程序代碼,以在此編譯單元中啟用 Just My Code 偵錯。 設定 /JMC。
支援 C++ 動態除錯
(預告)設定編譯器旗標 /dynamicdeopt 以開啟 C++ 動態除錯。 放置非優化斷點,並隨時使用隨選函式去優化功能。 使用此模式來除錯優化的程式碼。
通用語言執行階段支援
使用 .NET 運行時間服務。 此開關與其他部分開關不相容。 詳情請參閱 /clr 開關家族的文件。
選項
- 沒有通用語言執行時支援 ——沒有通用語言執行時支援。
- 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 - Level 4 顯示所有 Level 3 警告及資訊性警告,大多數情況下可安全忽略。
- EnableAllWarnings - 啟用所有警告,包括預設停用的警告。
將警告視為錯誤
將編譯程式警告視為錯誤。 對新專案而言,最好在每次編譯時都使用 /WX。 解決所有警告,以將難以尋找的程式代碼瑕疵降至最低。
警告版本
隱藏特定版本編譯程式之後引進的警告。 設定 /Wv:xx[.yy[.zzzzz]]。
診斷格式
啟用豐富的診斷功能,並在診斷訊息中提供欄位資訊和來源內容。
選項
- 插入符號 - 提供診斷訊息中的欄位資訊。 也會輸出相關的原始碼行,並以插入號(^)標示出錯的欄位。
- 數據行資訊 - 此外,請在發出診斷的行內提供數據行編號,如果適用的話。
- 傳統 - 僅輸出具有行號的先前簡潔診斷訊息。
SDL 檢查
額外的安全開發生命週期(SDL)建議檢查。 包括啟用額外的安全程式碼產生功能,並將額外的安全性相關警告視為錯誤。 設定 /sdl、 /sdl-。
多處理器編譯
啟用多處理器編譯。 設定編譯程序 /MP 選項。
啟用位址清理程式
使用 AddressSanitizer 工具編譯並連結程式。 此屬性目前支援 x86 和 x64 目標組建。 設定編譯程序 /fsanitize 選項。
啟用Fuzzer支援(實驗性)
用 Fuzzer 編譯程式。 啟用 AddressSanitizer 以獲得最佳效果。 目前可用於 x86 和 x64 版本。 設定 /fsanitize=fuzzer。
C/C++ 最佳化特性
最佳化
選擇一個程式碼優化選項。 選擇 自訂 以使用特定的優化選項。 設定 /Od、 /O1、 /O2。
選項
- 自訂 - 自訂最佳化。
- 停用 - 停用最佳化。
-
最大化最佳化(偏重大小) - 等同於
/Os /Oy /Ob2 /Gs /GF /Gy。 -
最大化最佳化(偏重速度) - 等同於
/Oi /Ot /Oy /Ob2 /Gs /GF /Gy。 -
最佳化(偏重速度) - 等同於
/Oi /Ot /Oy /Ob2。
內嵌函式展開
選擇內嵌函式的擴充層級以進行組建。 設定 /Ob。
選項
- Default
- Disabled - 停用預設開啟的內嵌展開。
-
僅__inline - 只展開標示為
inline、__forceinline或__inline的函式。 或者,在類別宣告內定義的C++成員函式中。 -
任何適合 - 展開標示為
inline或 的__inline函式,以及編譯程序選擇的任何其他函式。 (擴充由編譯器自行決定。這種編譯器選擇的擴充通常稱為 自動內線化。)
啟用內部函數
啟用內部函數。 使用內在函數能產生更快但可能較大的程式碼。 設定 /Oi。
偏好大小或速度
是偏重程式碼大小還是程式碼速度。
Global Optimization 必須開啟。 設定 /Ot、 /Os。
選項
- 偏好小型程式代碼 - 藉由指示編譯程式優先於速度,將 EXE 和 DLL 的大小降到最低。
- 偏好快速程式代碼 - 藉由指示編譯程式優先於大小,將 EXE 和 DLL 的速度最大化。 (此值為啟用優化時的預設值。)
- 都不是 - 沒有大小和速度優化。
省略框架指標
抑制在呼叫堆疊上建立框架指標。
啟用光纖安全優化
為使用光纖存取線程本地儲存的應用,實現對光纖安全的優化。 設定 /GT。
整個程式最佳化
藉由將程式代碼的產生延遲到連結時來啟用跨模組優化。 需要連結器選項 Link Time Code Generation。 設定 /GL。
C/C++ 預處理器屬性
前置處理器定義
定義原始程式檔的前置處理符號。
解除前置處理器定義
指定取消一或多個前置處理器的定義。 設定 /U。
取消所有前置處理器的定義
取消定義所有先前定義的前置處理器值。 設定 /u。
忽略標準包含路徑
防止編譯程式在 INCLUDE 環境變數中指定的目錄中搜尋 include 檔案。
預處理至檔案
前置處理 C 和 C++原始程式檔,並將前置處理的輸出寫入檔案。 此選項會隱藏編譯,而且不會產生 .obj 檔案。
前置處理抑制行號
前置處理不含 #line 指令。
保留批注
啟用此選項,以在 .i 檔案和其他預處理器輸出中保留 C 和 C++ 來源程式碼註解(// 和 /* ... */)。 預處理器預設會移除註解。
需要設定至少一個 預處理 選項。 設定 /C。
使用標準合規預處理器
使用標準符合標準的預處理器(/Zc:preprocessor)。 目前由 /std:c11 以及後續版本表示。 若要使用舊有預處理器,請將此屬性設為 No。
C/C++ 程式碼產生屬性
啟用字串共用
啟用此特性以啟用字串池化,將相同字串合併成一個編譯後的唯讀副本。 這可能導致課程規模縮小。
/O1、/O2和 /ZI 會自動設定 /GF 選項。
啟用最小重建
啟用最小重建,用以決定是否重新編譯那些包含含有已變更之 C++ 類別定義的標頭 (.h) 檔案的 C++ 原始程式檔。
啟用 C++ 例外狀況
指定編譯器所使用的例外狀況處理模型。
選項
-
是,SEH 例外狀況 - 捕捉異步(結構化)和同步(C++)例外狀況的例外狀況處理模型。 設定
/EHa。 -
是的 ——例外處理模型,只捕捉 C++ 例外,並設定編譯器假設
extern "C"函式永遠不會拋出 C++ 例外。 設定/EHsc。 -
是的,Extern C 函式 ——例外處理模型,只捕捉 C++ 例外,並設定編譯器假設
extern "C"函式會拋出例外。 設定/EHs。 - 否 - 沒有例外狀況處理。
較小的類型檢查
可檢查是否轉換成較小的類型。 與除錯以外的任何最佳化類型都不相容。 設定 /RTCc。
基本執行階段檢查
啟用基本執行時錯誤檢查。 與除錯以外的任何最佳化類型都不相容。 設定 /RTCs、 /RTCu、 /RTC1。
選項
- 堆疊框架 - 啟用堆疊框架執行錯誤檢查功能。
- 未初始化的變數 - 在未初始化的情況下使用變數時報告。
-
兩者 (/RTC1,等同於 /RTCsu) - 相當於
/RTCsu。 - 預設值 - 預設運行時間檢查。
執行階段程式庫
指定一個用於連結的執行時函式庫。 設定 /MT/MTd/MD/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 或 16 位元組邊界。 設定 /Zp。
選項
-
1 位元組 - 在一位元組邊界上封裝結構。 與
/Zp相同。 - 2 位元組 - 在兩位元組邊界上排列結構。
- 4 位元組 - 以四位元組為界限封裝資料結構。
- 8 位元組 - 在八位元組邊界上排列結構(預設值)。
- 16 個字節 - 在 16 位元組界限上封裝結構。
- 預設值 - 預設對齊設定。
指定結構成員對齊的 1、2、4 或 8 位元組界限。 設定 /Zp。
選項
-
1 位元組 - 在一位元組邊界上封裝結構。 與
/Zp相同。 - 2 位元組 - 在兩位元組邊界上排列結構。
- 4 位元組 - 以四位元組為界限封裝資料結構。
- 8 位元組 - 在八位元組邊界上排列結構(預設值)。
- 預設值 - 預設對齊設定。
安全性檢查
協助偵測堆疊緩衝區溢位,攻擊者可利用這些漏洞入侵你的應用程式。
選項
控制流程防護
協助偵測試圖分派至不合法程式碼區塊的行為。
選項
-
是的 ——啟用控制流量保護。 設定
/guard:cf。 - 否
啟用函式階層連結
允許編譯器以封裝函式 (COMDAT) 的形式來封裝個別函式。 為了使用「編輯並繼續」功能,此項為必需。 設定 /Gy。
啟用平行程式代碼產生
允許編譯器在啟用優化時針對使用 #pragma loop(hint_parallel[(n)]) 所識別的迴圈生成平行代碼。
啟用增強指令集
啟用使用支援增強指令集的處理器上的指令。 例如,SSE、SSE2、AVX 和 AVX2 對 IA-32 的增強,以及 AVX 和 AVX2 對 x64 的增強。
/arch:SSE 僅適用於 x86 版本。
/arch:SSE2 適用於 x86 和 x64 版本,並且是兩種架構的預設配置。 您可以停用增強的指令,方法是使用 /arch:IA32。 如需詳細資訊,請參閱/arch (x86), /arch (x64), /arch (ARM64)和/arch (ARM).
選項
-
串流 SIMD 擴充功能(X86) -啟用串流 SIMD 擴充功能。 設定
/arch:SSE。 -
串流 SIMD 擴充套件 2(x86) — 啟用串流 SIMD 擴充套件 2。 設定
/arch:SSE2。 -
進階向量擴展(X86/X64) -啟用進階向量擴展。 設定
/arch:AVX。 -
進階向量擴展 2(X86/X64) -啟用進階向量擴展 2。 設定
/arch:AVX2。 -
Advanced Vector Extensions 512(X86/X64) -啟用 Advanced Vector Extensions 512。 設定
/arch:AVX512。 -
Advanced Vector Extensions AVX10.1(X86/X64) -啟用 Advanced Vector Extensions 10 版本 1。 設定
/arch:AVX10.1。 -
Advanced Vector Extensions AVX10.2(X86/X64) -啟用 Advanced Vector Extensions 10 版本 2。 設定
/arch:AVX10.2。 -
虛擬化擴充(ARM)。 啟用 ARM 虛擬化擴充功能。 設定
/arch:ARMv7VE。 -
ARM VFPv4 指令(ARM)。 啟用 ARM VFPv4 指令。 設定
/arch:VFPv4。 -
CPU 擴充需求為 ARMv8.0-A(ARM64)。 啟用 ARMv8.0-A 要求。 設定
/arch:arm8.0。 -
CPU 擴充需求為 ARMv8.1-A(ARM64)。 啟用 ARMv8.1-A 要求。 設定
/arch:arm8.1。 -
CPU 擴充需求為 ARMv8.2-A(ARM64)。 支援 ARMv8.2-A 要求。 設定
/arch:arm8.2。 - CPU 擴充需求為 ARMv8.3-A(ARM64)。 啟用 ARMv8.3-A 要求。 設定
/arch:arm8.3。 -
CPU 擴充需求為 ARMv8.4-A(ARM64)。 啟用 ARMv8.4-A 需求。 設定
/arch:arm8.4。 -
CPU 擴充需求為 ARMv8.5-A(ARM64)。 啟用 ARMv8.5-A 要求。 設定
/arch:arm8.5。 -
CPU 擴充需求為 ARMv8.6-A(ARM64)。 啟用 ARMv8.6-A 所需功能。 設定
/arch:arm8.6。 -
CPU 擴充需求為 ARMv8.7-A(ARM64)。 啟用 ARMv8.7-A 要求。 設定
/arch:arm8.7。 -
CPU 擴充需求為 ARMv8.8-A(ARM64)。 啟用 ARMv8.8-A 需求。 設定
/arch:arm8.8。 -
無增強指令 - 禁用 x86 版本的增強說明。 設定
/arch:IA32。 -
未設定 - 不會明確設定選項
/arch。
啟用使用支援增強指令集的處理器上的指令。 例如,SSE、SSE2、AVX 和 AVX2 對 IA-32 的增強,以及 AVX 和 AVX2 對 x64 的增強。 目前/arch:SSE和/arch:SSE2僅適用於建置 x86 架構時。 如果未指定任何選項,編譯程式會使用在支援 SSE2 的處理器上找到的指示。 您可以停用增強的指令,方法是使用 /arch:IA32。 如需詳細資訊,請參閱/arch (x86), /arch (x64), /arch (ARM64)和/arch (ARM).
選項
-
串流 SIMD 擴充功能(X86) -啟用串流 SIMD 擴充功能。 設定
/arch:SSE。 -
串流 SIMD 擴充套件 2(x86) — 啟用串流 SIMD 擴充套件 2。 設定
/arch:SSE2。 -
進階向量擴展(X86/X64) -啟用進階向量擴展。 設定
/arch:AVX。 -
進階向量擴展 2(X86/X64) -啟用進階向量擴展 2。 設定
/arch:AVX2。 -
Advanced Vector Extensions 512(X86/X64) -啟用 Advanced Vector Extensions 512。 設定
/arch:AVX512。 -
Advanced Vector Extensions AVX10.1(X86/X64) -啟用 Advanced Vector Extensions 10 版本 1。 設定
/arch:AVX10.1。 -
虛擬化擴充(ARM)。 啟用 ARM 虛擬化擴充功能。 設定
/arch:ARMv7VE。 -
ARM VFPv4 指令(ARM)。 啟用 ARM VFPv4 指令。 設定
/arch:VFPv4。 -
CPU 擴充需求為 ARMv8.0-A(ARM64)。 啟用 ARMv8.0-A 要求。 設定
/arch:arm8.0。 -
CPU 擴充需求為 ARMv8.1-A(ARM64)。 啟用 ARMv8.1-A 要求。 設定
/arch:arm8.1。 -
CPU 擴充需求為 ARMv8.2-A(ARM64)。 支援 ARMv8.2-A 要求。 設定
/arch:arm8.2。 - CPU 擴充需求為 ARMv8.3-A(ARM64)。 啟用 ARMv8.3-A 要求。 設定
/arch:arm8.3。 -
CPU 擴充需求為 ARMv8.4-A(ARM64)。 啟用 ARMv8.4-A 需求。 設定
/arch:arm8.4。 -
CPU 擴充需求為 ARMv8.5-A(ARM64)。 啟用 ARMv8.5-A 要求。 設定
/arch:arm8.5。 -
CPU 擴充需求為 ARMv8.6-A(ARM64)。 啟用 ARMv8.6-A 所需功能。 設定
/arch:arm8.6。 -
CPU 擴充需求為 ARMv8.7-A(ARM64)。 啟用 ARMv8.7-A 要求。 設定
/arch:arm8.7。 -
CPU 擴充需求為 ARMv8.8-A(ARM64)。 啟用 ARMv8.8-A 需求。 設定
/arch:arm8.8。 -
無增強指令 - 禁用 x86 版本的增強說明。 設定
/arch:IA32。 -
未設定 - 不會明確設定選項
/arch。
選項
-
串流 SIMD 擴展 - 串流 SIMD 擴展。 集合
/arch:SSE -
串流 SIMD 擴充功能 2 - 串流 SIMD 擴充功能 2。 集合
/arch:SSE2 -
進階向量延伸 - 進階向量延伸。 集合
/arch:AVX -
進階向量延伸模組 2 - 進階向量延伸模組 2。 集合
/arch:AVX2 -
沒有增強版指令 - 沒有增強版指令。 集合
/arch:IA32 - 未設定 - 未設定。
啟用向量長度
啟用為 /arch:AVX512 和 /arch:AVX10.x 標記選擇向量長度。 允許的值為 256 和 512 位元(X86/X64)。
浮點模型
設定浮點模型。 設定 /fp:precise、 /fp:strict、 /fp:fast。
選項
- 精確 - 預設值。 改善浮點運算測試中相等性與不相等性的一致性。
-
Strict - 最嚴格的浮點模型。
/fp:strict導致fp_contract關閉與fenv_access開啟。/fp:except是隱含的,而且可以藉由明確指定/fp:except-來停用。 搭配/fp:except-使用 時,/fp:strict會強制執行嚴格的浮點語意,但不尊重例外事件。 - Fast - 在大部分情況下建立最快的程序代碼。
啟用浮點例外狀況
可靠的浮點例外狀況模型。 例外狀況會在觸發后立即引發。 設定 /fp:except。
建立可熱修補的映像
當熱修補開啟時,編譯程式可確保每個函式的第一個指令是兩個字節,因為熱修補是必要的。 設定 /hotpatch。
Spectre 緩解
CVE 2017-5753 的Spectre風險降低措施。 設定 /Qspectre。
選項
- 啟用 - 啟用 CVE 2017-5753 的 Spectre 緩解功能。
- 所有負載 - 對所有負載啟用 Spectre 緩解措施。
- 所有控制流負載 - 啟用 Spectre 控制流量負載緩解。
- 停用 - 未設定。
Spectre 緩解
CVE 2017-5753 的Spectre風險降低措施。 設定 /Qspectre。
選項
- 啟用 - 啟用 CVE 2017-5753 的 Spectre 緩解功能。
- 停用 - 未設定。
啟用 Intel JCC 勘誤緩解
針對 Intel JCC 勘誤微碼更新所造成的效能影響的軟體緩解措施。 設定 /QIntel-jcc-erratum。
啟用EH持續元資料
產生一個排序清單,列出所有有效例外處理二進位檔的延續目標,執行時用於 RIP 驗證。 目前可用於 x64 組裝。 設定 /guard:ehcont。
啟用簽署報稅表
啟用簽署回報,有助於偵測並防止功能回傳中試圖派遣至非法區塊的行為。 目前可用於 ARM64 版本。 設定 /guard:signret。
C/C++ 語言屬性
停用語言延伸模組
隱藏或啟用語言延伸模組。 設定 /Za。
將WChar_t視為內建類型
啟用此屬性後,型別 wchar_t 會成為原生型別,並以與 short 對應至 __int16 相同的方式對應至 __wchar_t。
/Zc:wchar_t 預設是開啟的。
在 For 循環範圍中強制一致性
針對具有Microsoft延伸模組的 for 語句循環,實作標準C++行為。 設定 /Za、 /Ze (停用語言延伸模組。
/Zc:forScope 預設是開啟的。
拿掉未參考的程式代碼和數據
啟用此功能後,編譯器將不再為未被引用的程式碼和資料產生符號資訊。
強制型別轉換規則
用於依據 C++11 標準,將 rvalue 參考類型識別為鑄造操作的結果。
啟用執行階段類型資訊
新增可在執行時檢查 C++ 物件型別的程式碼(執行時型別資訊,RTTI)。 設定 /GR、 /GR-。
開啟 MP 支援
啟用 OpenMP 2.0 語言延伸模組。 設定 /openmp。
C++ 語言標準
決定編譯器強制執行的 C++ 語言標準。 默認值未設定標準選項,因此編譯程式會使用其預設C++14 設定。 如果你選擇特定值,對應 /std 的編譯器選項就會被設定。
選項
- 預設值 (ISO C++14 標準)
- ISO C++14 標準 (/std:c++14)
- ISO C++17 標準 (/std:c++17)
- ISO C++20 Standard (/std:c++20)
- 預覽 - ISO C++23 標準(/std:c++23preview)
- 預覽 - 最新C++工作草稿的功能(/std:c++latest)
C 語言標準
決定編譯器所強制執行的 C 語言標準。 默認值不會設定標準選項,因此編譯程式會使用其預設的舊版 MSVC 設定。 如果你選擇特定值,對應 /std 的編譯器選項就會被設定。
選項
- 預設 (舊版 MSVC)
- ISO C11 標準 (/std:c11)
- ISO C17 (2018) 標準 (/std:c17)
- 預覽 - 來自最新 C 工作草案(/std:clatest)的功能
一致性模式
啟用或隱藏一致性模式。 設定 /permissive-。
啟用實驗性C++標準連結庫模組
C++模組 TS 和標準連結庫模組的實驗性支援。
建置 ISO C++23 標準連結庫模組
從 Visual Studio 17.6 開始,當啟用此屬性並將 C++ 語言標準 設定為 /std:c++latest時,Microsoft C++ 專案會自動尋找並建置 ISO C++23 標準程式庫模組。 這可讓您在C++程式代碼中import std 或 import std.compat。
C/C++ 預編譯標頭屬性
先行編譯標頭
建立/使用先行編譯標頭
啟用在建置期間建立或使用先行編譯標頭檔。 設定 /Yc、 /Yu。
選項
-
建立 - 指示編譯程式建立代表特定時間點編譯狀態的先行編譯標頭 (
.pch) 檔案。 -
使用 - 指示編譯程式在目前的編譯中使用現有的先行編譯頭 (
.pch) 檔案。 - 不使用先行編譯標頭 - 不使用先行編譯標頭。
先行編譯標頭檔
指定編譯器用來建立或存取預編譯標頭的標頭檔案名稱。 設定 /Yc、 /Yu。
先行編譯標頭輸出文件
指定所產生先行編譯頭文件的路徑或名稱。 設定 /Fp。
C/C++ 輸出檔案屬性
展開屬性化來源
建立一個清單檔案,並將擴展屬性注入原始檔案中。 設定 /Fx。
組合語言編程輸出
指定組合語言輸出檔案的內容。 設定 /FA/FAc/FAs/FAcs
選項
- 無清單 - 沒有清單。
-
僅含組合語言的列表 - 組合語言程式碼:
.asm. -
機器碼組譯 - 機器與組合碼:
.cod -
帶原始碼的組合語言 - 原始碼與組合語言:
.asm -
組合語言、機器碼與原始碼 - 組合語言、機器碼與原始碼:
.cod
使用 Unicode 進行組合器清單
使輸出檔案以UTF-8格式建立。
ASM 清單位置
指定 ASM 列表檔案的相對路徑或名稱。 可以是檔案名稱或目錄名稱。 設定 /Fa。
模組輸出檔案名稱
模組或標頭單元輸出(BMI)檔案位置。 可以是檔案名稱或目錄名稱。 設定 /ifcOutput[name]。
模組相依性檔案名稱
指定產生的模組相依檔案的路徑和/或名稱。 設定 /scanDependencies[path]。
目的檔名稱
指定一個名稱以覆寫預設的物件檔案名稱。 可以是檔案名稱或目錄名稱。 設定 /Fo。
程式資料庫檔案名稱
指定編譯器產生的 PDB 檔案名稱。 同時也指定了編譯器產生的 IDB 檔案的基底名稱。 可以是檔案名稱或目錄名稱。 設定 /Fd。
產生 XML 檔檔
指定編譯程式應該產生 XML 檔批注檔案 (。XDC)。 設定 /doc。
XML 檔案檔名稱
指定產生的 XML 文件檔案名稱。 可以是檔案名稱或目錄名稱。 設定 /doc:<名稱>。
產生原始碼相依性檔案
產生一個包含編譯器用於編譯原始碼的所有檔案清單的 JSON 檔案。 設定 /sourceDependencies。
來源相依性檔案名稱
指定產生的來源依賴檔案的路徑和/或名稱。 設定 /sourceDependencies[path]。
C/C++ 瀏覽資訊屬性
啟用瀏覽資訊
指定編譯器是否應該產生 .bsc 檔案。 設定 /FR。
瀏覽資訊文件
指定瀏覽器資訊檔案的可選名稱。 設定 /FR<名稱>。
C/C++ 外部包含屬性
將角括號隨附的檔案視為外部
指定是否要將角括弧隨附的檔案視為外部。 將此屬性設定為 [是 ] 以設定編譯 /external:anglebrackets 程序選項。
外部標頭警告層級
請設定您希望編譯器對外部標頭檔中的代碼錯誤檢查的嚴謹程度。 此屬性會設定編譯 /external:Wn 程序選項。 如果此值設定為 [繼承專案警告層級 ] 或預設值,則會忽略其他 /external 選項。
外部標頭中的範本診斷
指定是否要跨範本具現化鏈結評估警告層級。 將此屬性設定為 [是 ] 以設定編譯 /external:templates- 程序選項。
停用外部標頭的程式代碼分析
停用外部標頭的程式代碼分析。 設定編譯程序 /analyze:external- 選項。
外部標頭的分析規則集
指定外部標頭的程式代碼分析規則集重寫。 若未指定此屬性,則使用 Code Analysis 設定。 設定編譯程序 /analyze:external:ruleset path 選項。
C/C++ 進階屬性
呼叫慣例
選取應用程式的預設呼叫慣例(可由函式覆寫)。 設定 /Gd/Gr/Gz/Gv
選項
-
__cdecl- 指定__cdecl所有函式的呼叫慣例,除 C++ 成員函數及標記__stdcall為 or__fastcall的函式外。 -
__fastcall- 指定__fastcall所有函式的呼叫慣例,除 C++ 成員函數及標記__cdecl為 or__stdcall的函式外。 所有__fastcall函式都必須有原型。 -
__stdcall- 指定__stdcall所有函式的呼叫慣例,除 C++ 成員函數及標記__cdecl為 or__fastcall的函式外。 所有__stdcall函式都必須有原型。 -
__vectorcall- 指定所有函式的__vectorcall呼叫慣例,但 C++ 成員函式以及標記為__cdecl、__fastcall或__stdcall的函式除外。 所有__vectorcall函式都必須有原型。
編譯為
選擇原始檔案的編譯語言選項。 設定 /TC、、/TP/interface、/internalPartition或/exportHeader選項。
選項
- 預設 - 預設值。
-
編譯為 C 程式代碼 (
/TC) - 將指定的原始程式檔編譯為 C 程式代碼。 預設情況下,副檔名為.c的檔案會編譯為 C。 -
編譯為C++程序代碼 (
/TP) - 將指定的原始程式檔編譯為程式代碼C++。 預設情況下,所有沒有.c、.ixx、.cppm、.h或 沒有副檔名的原始碼檔案,都會被編譯成 C++。 -
編譯為C++模組程序代碼 (
/interface) - 將指定的原始程式檔編譯為C++模組程序代碼。 預設情況下,帶有.ixxor.cppm副檔名的檔案會編譯成 C++ 模組程式碼。 -
編譯為C++模組內部分割區 (
/internalPartition) - 將指定的原始程式檔編譯為C++模組內部分割區。 -
編譯為C++標頭單位 (
/exportHeader) - 將指定的原始程序檔編譯為C++標頭單位。 預設情況下,有.h副檔名或無副檔名的檔案會被編譯為標頭單元。
停用特定警告
停用指定的警告編號。 把警告號碼放在分號分隔的清單裡。 設定 /wd<數字>。
強制包含檔案
指定一個或多個強制包含的檔案。 設定 /FI<名稱>。
強制執行 #using 檔案
指定一或多個強制使用的 #using 檔案。 設定 /FU<名稱>。
顯示包括
產生 Include 檔清單以及編譯器輸出。 設定 /showIncludes。
使用完整路徑
在診斷訊息中使用完整路徑。 設定 /FC。
省略默認連結庫名稱
指定在檔案中省略預設函式庫名稱 .obj 。 設定 /Zl。
報告內部編譯器錯誤
注意
即將淘汰此選項。 從 Windows Vista 開始,錯誤報告是由 Windows 錯誤報告 (WER) 設定來控制。
將特定警告視為錯誤
將特定的編譯器警告視為錯誤,其中 n 是編譯器警告。
其他選項
其他選項。