Udostępnij za pośrednictwem


Makra (C/C++)

Wstępne przetwarzanie rozwija makra we wszystkich wierszach, które nie są dyrektywy preprocesora (wiersze, które nie mają # jako pierwszy znak nie spacji) i w części niektórych dyrektyw, które nie są pomijane jako część kompilacji warunkowej. "Kompilacja warunkowa"dyrektyw pozwalają pominąć kompilacji części pliku źródłowego, testując wyrażenie stałe lub identyfikator, aby określić, które bloki tekstu są przekazywane przez kompilator i bloków tekstu, które są usuwane z pliku źródłowego w czasie wstępnego przetwarzania.

#define Dyrektywy jest zazwyczaj używany do kojarzenia znaczące identyfikatory z stałe, słowa kluczowe i często używane instrukcje lub wyrażeń.Identyfikatory, które stanowią stałe są czasami nazywane "Stałe symboliczne" lub "manifest stałe". Identyfikatory, które reprezentują instrukcje lub wyrażeń są nazywane "makra". W tej dokumentacji preprocesora używane jest jedynie termin "makro".

Po rozpoznaniu nazwy makra w tekście źródłowym programu lub w argumentach niektórych poleceń preprocesora jest traktowana jako wywołanie tego makra.Nazwa makra zastępuje kopię organ makro.Jeśli makro przyjmuje argumenty, rzeczywiste argumenty po nazwie makra są zastępowane parametrów formalnych w treści makro.Proces zastępowania wywołanie makra przetworzonych kopii jednostka nazywa się "rozszerzenia" wywołania makra.

W praktyce istnieją dwa typy makr. "Makra Object-like"podejmować żadnych argumentów makra"Funkcja like"mogą być definiowane zaakceptować argumentów, tak aby wyglądać i działać jak wywołania funkcji.Ponieważ makra nie generują wywołania funkcji rzeczywiste, czasami wystarczy ustawić programy działają szybciej, zastępując wywołania funkcji makr.(W języku C++, wbudowane funkcje są często preferowaną metodą). Jednakże makra może stwarzać problemy, jeśli nie można zdefiniować i używać ich ostrożnie.Należy używać nawiasów w definicji makra z argumentami, do zachowania właściwego pierwszeństwo w wyrażeniu.Ponadto makra mogą nie obsługiwać poprawnie wyrażenia z efektów ubocznych.Zobacz getrandom przykład, w # zdefiniować dyrektywy Aby uzyskać więcej informacji.

Po zdefiniowaniu makra nie można przedefiniować go na inną wartość, bez usuwania pierwszy definicji oryginalnej.Jednakże można ponownie zdefiniować makro z samej definicji.W ten sposób tej samej definicji może się pojawić więcej niż jeden raz w programie.

#Undef dyrektywa usuwa definicji makra.Po usunięciu definicji można ponownie zdefiniować makro do innej wartości.# Define dyrektywy i #undef dyrektywy omówienia #define i #undef dyrektyw, odpowiednio.

Aby uzyskać więcej informacji zobacz temat,

Zobacz też

Inne zasoby

C i C++ preprocesora odniesienia