建議選擇其一時的函式和巨集
大部分的 Microsoft run-time 程式庫常式會編譯或組譯函式,但某些常式實作為巨集。 當標頭檔宣告函式和巨集的版本為常式時,巨集定義優先,因為永遠會出現在函式宣告之後。 當您叫用會實作為函式] 與 [巨集的常式時,您可以強制編譯器使用的功能版本兩種方式:
以括弧括住常式的名稱。
#include <ctype.h> a = _toupper(a); // Use macro version of toupper. a = (_toupper)(a); // Force compiler to use // function version of toupper.
"取消"以巨集定義#undef指示詞:
#include <ctype.h> #undef _toupper
如果您需要選擇一個函式和巨集的程式庫常式的實作,請考慮下列的取捨:
大小與速度使用巨集的主要優點是更快速的執行時間。 在前置處理,巨集展開 (根據其定義遭到取代) 內嵌每次使用時。 函式定義中,就會發生就會呼叫一次無論次數。 巨集可能會增加程式碼的大小,但沒有相關的函式呼叫的額外負荷。
函式評估函式會評估為一個地址。 巨集則否。 因此,您無法在需要有指向指標的內容中使用巨集名稱。 舉個例說,您可以宣告函式指標,但不是一個巨集指令指標。
型別檢查當您宣告函式時,編譯器可以檢查引數型別。 因為您無法將巨集的宣告,編譯器不會檢查巨集引數型別 ; 雖然它可以檢查您傳遞給巨集的引數數目。