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...