Sdílet prostřednictvím


Doporučení pro volbu mezi funkcemi a makra

Většina rutiny spuštění knihovny Microsoft jsou kompilovány nebo smontováno funkcí, ale některé rutiny jsou implementovány jako makra.Když soubor záhlaví deklaruje funkci a makro verzi rutina, definice makra přednost, protože se zobrazí vždy po deklaraci funkce.Když vyvoláte rutiny, která je implementována jako funkce a makra, můžete vynutit kompilátoru verze funkce použít dvěma způsoby:

  • Rutinní název uzavřete do závorek.

    #include <ctype.h>
    a = _toupper(a);    // Use macro version of toupper.
    a = (_toupper)(a);  // Force compiler to use 
                        // function version of toupper.
    
  • "Nedefinovaný" definice makra s #undef směrnice:

    #include <ctype.h>
    #undef _toupper
    

Pokud je nutné zvolit funkci a makro provádění rutina knihovny, zvažte následující kompromis:

  • Rychlost a velikost hlavní výhodou použití maker je rychlejší spuštění.Při úpravě před zpracováním, makro je rozbalen (nahrazena definicí) vložené pokaždé, když je používán.Definice funkce nastává pouze jednou bez ohledu na to, kolikrát se nazývá.Makra mohou zvětšit velikost kódu, ale nemají zatížení spojené s volání funkce.

  • Vyhodnocení funkce funkce vyhodnotí na adresu; Makro není.Proto nelze použít název makra v kontextu vyžadující ukazatel.Můžete například deklarovat ukazatel na funkci, ale není ukazatel na makro.

  • Kontrola typu při deklarování funkce kompilátoru můžete zkontrolovat typ argumentu.Protože makro nelze deklarovat, kompilátor nemůže zkontrolovat typ argumentu makro; Ačkoli může zkontrolovat počet argumentů předat makra.

Viz také

Referenční dokumentace

Funkce knihovny CRT