在函式和巨集之間選擇的建議

大部分的 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
    

如果您需要在程式庫常式的函式和巨集實作之間做選擇,請考慮下列取捨:

  • 速度與大小:使用巨集的主要優點,在於它的執行時間較快。 在前置處理期間,宏會在每次使用時內嵌展開(由其定義取代)。 不論呼叫多少次,函式定義只會發生一次。 宏可能會增加程式碼大小,但沒有與函式呼叫相關聯的額外負荷。

  • 函式評估 函式會評估為位址;宏不會。 因此,您無法在需要指標的內容中使用宏名稱。 例如,您可以針對函式宣告指標,但不能針對巨集宣告指標。

  • 類型檢查:當您宣告函式時,編譯器可以檢查引數類型。 因為您無法宣告宏,編譯器無法檢查宏引數類型;雖然它可以檢查您傳遞至宏的引數數目。

另請參閱

類型泛型數學
C 執行時間 (CRT) 和 C++ 標準程式庫 (STL) .lib 檔案