在函式和巨集之間選擇的建議
大部分的 Microsoft 執行階段程式庫常式都是編譯或組合函式,但有些常式會實作為巨集。 當標頭檔案同時宣告常式的函式和巨集版本時,巨集定義會有較高的優先權,因為它一律會出現在函式宣告之後。 當您叫用同時實作為函式和巨集的常式時,有兩種方法可以強制編譯器使用函式版本:
用括號括住常式的名稱。
#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
如果您需要在程式庫常式的函式和巨集實作之間做選擇,請考慮下列取捨:
速度與大小:使用巨集的主要優點,在於它的執行時間較快。 在前置處理期間,巨集會在每次使用時內嵌展開(由其定義取代)。 不論呼叫多少次,函式定義只會發生一次。 巨集可能會增加程序代碼大小,但沒有與函數調用相關聯的額外負荷。
函式評估 函式會評估為位址;巨集不會。 因此,您無法在需要指標的內容中使用巨集名稱。 例如,您可以針對函式宣告指標,但不能針對巨集宣告指標。
類型檢查:當您宣告函式時,編譯器可以檢查引數類型。 因為您無法宣告巨集,編譯程式無法檢查巨集自變數類型;雖然它可以檢查您傳遞至巨集的自變數數目。