Różnica między wierszem a makrem w C ++
Zawartość
Makro to instrukcja, która rozwija się w momencie jej wywołania. Można również zdefiniować funkcje, takie jak makra. Podobnie funkcje wbudowane rozszerzają się również w momencie wywołania. Jedną podstawową różnicą między funkcją inline i funkcją makro jest to, że funkcje wbudowane są rozszerzane podczas kompilacjai makra są rozszerzane, gdy program jest przetwarzany przez preprocesor.
Przeanalizujmy różnicę między wstawką a makrem za pomocą tabeli porównawczej.
- Wykres porównania
- Definicja
- Kluczowe różnice
- Wniosek
Wykres porównania
Podstawa do porównania | Inline | Makro |
---|---|---|
Podstawowy | Funkcje wbudowane są analizowane przez kompilator. | Makra są rozszerzane przez preprocesor. |
Składnia | inline typ_powrotu nazwa_funkcji (parametry) {. . . } | # zdefiniować nazwę_ Makra ciąg_nazwy |
Użyte słowa kluczowe | inline | #definiować |
Zdefiniowane | Można go zdefiniować wewnątrz lub na zewnątrz klasy. | Jest zawsze definiowany na początku programu. |
Ocena | Argument ocenia tylko raz. | Ocenia argument za każdym razem, gdy jest używany w kodzie. |
Ekspansja | Kompilator może nie wstawiać i rozszerzać wszystkich funkcji. | Makra są zawsze rozwijane. |
Automatyzacja | Krótkie funkcje zdefiniowane w klasie są automatycznie przekształcane w funkcje wbudowane. | Makra powinny być zdefiniowane konkretnie. |
Dostęp | Funkcja elementu wbudowanego może uzyskiwać dostęp do elementów danych klasy. | Makra nigdy nie mogą być członkami klasy i nie mogą uzyskiwać dostępu do członków danych klasy. |
Zakończenie | Definicja funkcji inline kończy się nawiasami klamrowymi na końcu funkcji inline. | Definicja makra kończy się nową linią. |
Debugowanie | Debugowanie jest łatwe dla funkcji wbudowanej, ponieważ sprawdzanie błędów odbywa się podczas kompilacji. | Debugowanie staje się trudne dla makr, ponieważ sprawdzanie błędów nie występuje podczas kompilacji. |
Wiążący | Funkcja wbudowana bardzo dobrze wiąże wszystkie instrukcje w treści funkcji, a treść funkcji zaczyna się i kończy nawiasami klamrowymi. | Makro napotyka problem wiązania, jeśli ma więcej niż jedną instrukcję, ponieważ nie ma symbolu zakończenia. |
Definicja Inline
Funkcja wbudowana wygląda jak zwykła funkcja, ale poprzedza ją słowo kluczowe „inline„. Funkcje wbudowane to funkcje krótkiej długości, które są rozszerzane w miejscu wywołania, zamiast być wywoływane. Przyjrzyjmy się funkcjom wbudowanym na przykładzie.
#zawierać W powyższym programie zadeklarowałem i zdefiniowałem funkcję initialize () jako funkcję wbudowaną w klasie „example”. Kod funkcji inicjalizacji () zostanie rozwinięty tam, gdzie zostanie wywołany przez obiekt klasy „przyklad”. Funkcja display () zdefiniowana w przykładzie klasy nie jest deklarowana jako wbudowana, ale może być uznana przez kompilator za wbudowaną, ponieważ w C ++ funkcje zdefiniowane w klasie są automatycznie wstawiane przez kompilator, biorąc pod uwagę długość funkcji. Makro jest „dyrektywą preprocesorów”. Przed kompilacją program jest sprawdzany przez preprocesora i gdziekolwiek znajdzie makro w programie, zastępuje to makro swoją definicją. Dlatego makro uważa się za „zamiennik”. Przeanalizujmy makro na przykładzie. #zawierać W powyższym kodzie zadeklarowałem funkcję makro GREATER (), która porównuje i znajduje większą liczbę obu parametrów. Możesz zauważyć, że nie ma średnika do zakończenia makra, ponieważ makro jest kończone tylko przez nową linię. Ponieważ makro jest tylko zamiennikiem, rozwinie kod makra, w którym jest wywoływany. Funkcje wbudowane są znacznie bardziej przekonujące niż funkcje makro. C ++ zapewnia także lepszy sposób definiowania stałej, która wykorzystuje słowo kluczowe „const”.
Definicja makro
Wnioski: