Visual C 編譯器選項

2021-04-27 10:38:37 字數 2296 閱讀 1821

visual c++

編譯器選項

/gd、/gr、/gz(呼叫約定)

/gd/gr

/gz

這些選項確定:

/gd

為預設設定,對除c++ 成員函式和標記為__stdcall__fastcall的函式以外的所有函式指定c 呼叫約定。

/gr

對除c++ 成員函式和標記為__cdecl__stdcall的函式以外的所有函式指定__fastcall呼叫約定。所有__fastcall函式必須具有原型。

/gz

對除採用的引數個數可變的函式和標記為__cdecl__fastcall的函式以外的所有原型c 函式指定__stdcall呼叫約定。所有__stdcall函式必須具有原型。

注意x86 specific —>預設情況下,c++ 成員函式當其 this

指標在ecx 暫存器中傳遞時使用呼叫約定。所有其他引數被從右到左推送到堆疊上,被呼叫例程從堆疊中彈出成員函式的引數。end x86 specific顯式標記為__cdecl__fastcall__stdcall的成員函式使用指定的呼叫約定。採用的引數個數可變的成員函式總是使用__cdecl呼叫約定。

__cdecl細節

對於c,__cdecl命名約定使用以下劃線(_) 開頭的函式名;不執行任何大小寫轉換。除非宣告為extern"c",否則c++ 函式將使用不同的名稱修飾方案。有關更多資訊,請參見修飾名。

__fastcall細節

某些__fastcall函式引數在暫存器x86 specific —>ecx 和edxend x86 specific中傳遞,其餘引數則被從右到左推送到堆疊上。被呼叫例程在返回之前從堆疊中彈出這些引數。/gr 通常減少執行時間。

注意

在對用內聯程式集語言編寫的任意函式使用__fastcall呼叫約定時,一定要小心。您對暫存器的使用可能與編譯器對它們的使用發生衝突。

對於c,__fastcall命名約定使用以「at」符(@) 開頭的函式名,後跟函式引數大小(以位元組為單位)。不執行任何大小寫轉換。編譯器使用下列命名約定模板:

@function_name@number

注意microsoft

不保證不同編譯器版本之間的__fastcall呼叫約定的實現相同。例如,16 位編譯器與32 位編譯器的實現就不同。

當使用__fastcall命名約定時,請使用標準包含檔案。否則將獲取無法解析的外部引用。

__stdcall細節

__stdcall

函式的引數被從右到左推送到堆疊上,被呼叫函式在返回之前從堆疊中彈出這些引數。

對於c,__stdcall命名約定使用以下劃線(_) 開頭的函式名,後跟「at」符(@) 和函式引數大小(以位元組為單位)。不執行任何大小寫轉換。編譯器使用下列命名約定模板:

_functionname@number

x86 specific —>

此選項對c++ 方法和函式的名稱修飾無效。除非宣告為extern"c",否則c++ 方法和函式將使用不同的名稱修飾方案。有關更多資訊,請參見修飾名。

end x86 specific

Visual C 編譯器選項

visual c 編譯器選項 選項 目的 指定響應檔案 列出編譯器選項 ai指定在解析傳遞到 using 指令的檔案引用時搜尋的目錄 arch 使用sse 或sse2 指令生成 c 在預處理期間保留注釋 c 編譯但不鏈結 clr 啟用c 的託管擴充套件並產生在公共語言執行庫上執行的輸出檔案 d 定義...

Visual C 編譯器選項

選項 目的 指定響應檔案 列出編譯器選項 ai指定在解析傳遞到 using 指令的檔案引用時搜尋的目錄 arch 使用 sse 或sse2 指令生成 c 在預處理期間保留注釋 c 編譯但不鏈結 clr 啟用 c 的託管擴充套件並產生在公共語言執行庫上執行的輸出檔案 d 定義常數和巨集 e 將預處理器...

Visual C 編譯器選項

選項 說明 md 定義 mt和 dll以便同時從標準 h 檔案中選擇執行時例程的多執行緒特定版本和 dll 特定版本。此選項還使編譯器將庫名 msvcrt.lib 放入 obj 檔案中。用此選項編譯的應用程式靜態鏈結到 msvcrt.lib。該庫提供允許鏈結器解析外部引用的 層。實際工作 包含在 m...