Udostępnij za pośrednictwem


Zalecenia dotyczące wybierania pomiędzy funkcjami i makrami

Większość procedur run-time library firmy Microsoft są kompilowane lub złożone funkcje, ale niektóre procedury są implementowane jako makra.Gdy plik nagłówkowy deklaruje zarówno funkcji, jak i wersji makra rutynowo, definicji makra ma pierwszeństwo, ponieważ zawsze pojawia się po deklaracji funkcji.Przy wywoływaniu procedura, która jest zaimplementowana jako funkcja i makra, można wymusić kompilatora do korzystania z wersji funkcji na dwa sposoby:

  • Rutynowe nazwę należy ująć w nawiasy.

    #include <ctype.h>
    a = _toupper(a);    // Use macro version of toupper.
    a = (_toupper)(a);  // Force compiler to use 
                        // function version of toupper.
    
  • "Usuń definicję" definicji makra z #undef dyrektywę:

    #include <ctype.h>
    #undef _toupper
    

Jeśli trzeba wybrać jedną z funkcji i wykonania makra rutynowo biblioteki, należy wziąć pod uwagę następujące kompromisów:

  • Prędkości w stosunku do rozmiaru główne korzyści przy użyciu makr jest krótszy czas realizacji.Podczas wstępnego przetwarzania, makro jest rozwinięta (zastępuje jego definicję) przy każdym jest używany wbudowany.Nazywa się tylko raz, niezależnie od tego, ile razy występuje definicji funkcji.Makra mogą zwiększyć rozmiar kodu, ale nie mają obciążenia związanego z wywołania funkcji.

  • Obliczyć wartości funkcji funkcja daje w wyniku adres; makro nie.Zatem nie można użyć nazwy makra kontekstów wymagające wskaźnika.Na przykład można zadeklarować wskaźnika do funkcji, ale nie wskaźnika do makra.

  • Kontrola typów w w deklaracji funkcji kompilator można sprawdzić typy argumentów.Ponieważ nie można zadeklarować makro, kompilator nie może sprawdzić typy argumentów makra; Mimo, że może on sprawdzić liczbę argumentów przekazuje się do makra.

Zobacz też

Informacje

Biblioteka CRT — Funkcje