Препоръчано, 2024

Избор На Редактора

Разлика между Inline и Macro в C ++

Макро е инструкция, която се разширява по време на извикването. Функциите също могат да бъдат дефинирани като макроси. По подобен начин вградените функции също се разширяват в точката на нейното извикване. Една основна разлика между вградената и макро функцията е, че вградените функции се разширяват по време на компилацията, а макросите се разширяват, когато програмата се обработва от препроцесора .

Нека разгледаме разликата между вградените и макросите с помощта на таблицата за сравнение.

Сравнителна таблица

Основа за сравнениеВ редицаMacro
ОсновенВградените функции се анализират от компилатора.Макросите се разширяват от препроцесора.
Синтаксисinline return_type funct_name (параметри) {., , }#define macro_name char_sequence
Използвани ключови думив редица
#define
ДефинираниТя може да бъде дефинирана вътре или извън класа.Тя винаги се определя в началото на програмата.
оценкаТой оценява аргумента само веднъж.Той оценява аргумента всеки път, когато се използва в кода.
експанзияКомпилаторът не може да вгражда и разширява всички функции.Макросите винаги се разширяват.
АвтоматизацияКратките функции, дефинирани вътре в класа, се правят автоматично по вътрешни функции.Макросите трябва да бъдат конкретно определени.
ДостъпФункцията за вграден член може да има достъп до членовете на данните от класа.Макросите никога не могат да бъдат членове на класа и нямат достъп до членовете на класа.
Прекратяване на договораДефиницията на вградената функция завършва с фигурни скоби в края на вградената функция.Определянето на макрос завършва с новата линия.
Отстраняване на грешкиОтстраняването на грешки е лесно за вградена функция, тъй като проверката на грешки се извършва по време на компилацията.Отстраняването на грешки става трудно за макросите, тъй като при компилирането не се извършва проверка за грешки.
подвързванеФункцията за вграждане свързва всички изрази в тялото на функцията много добре с тялото на функцията и завършва с фигурни скоби.Макросът се сблъсква с проблема на свързването, ако има повече от един оператор, тъй като той няма терминален символ.

Дефиниция на Inline

Вградената функция изглежда като нормална функция, но се предшества от ключовата дума „ inline “. Вградените функции са функции на къса дължина, които се разширяват в точката на неговото извикване, вместо да се извикват. Да разберем inline функции с един пример.

 #include using namespace std; пример на клас {int a, b; public: inline void инициализира (int x, int y) {a = x; b = y} void display () {cout << a << "" < 

В горната програма аз декларирах и дефинирах функцията инициализация (), като вградена функция в класа “example”. Кодът на функцията за инициализация () ще се разшири, където се извиква от обекта на класа "пример". Функцията display (), дефинирана в примера на класа, не е декларирана inline, но може да се счита за вградена от компилатора, като в C ++ функцията, дефинирана вътре в класа, автоматично се прави от компилатора, като се има предвид дължината на функцията.

  • Вградената функция намалява режима на извикване на функцията и връщането, което от своя страна намалява времето за изпълнение на програмата. Също така, аргументите се поставят върху стека и регистрите се записват, когато се извиква функция и се нулират, когато функцията върне, което отнема време, това се избягва от вградените функции, тъй като не е необходимо всеки път да се създават локални променливи и формални параметри.,
  • Вградените функции могат да бъдат член на класа и да имат достъп до данните на класа.
  • Вградената функция намалява времето на изпълнение на програмата, но понякога, ако дължината на вградената функция е по-голяма, размерът на програмата също ще се увеличи поради дублирания код. Следователно е добра практика да се вграждат много малки функции.
  • Аргументът за вградената функция се оценява само веднъж.

Определение на макро

Макро е „директива за препроцесори“. Преди компилирането програмата се разглежда от препроцесора и където някога открие макроса в програмата, той заменя този макрос с неговото определение. Следователно, макросът се счита за „подмяна на текст“. Нека изследваме макрос с един пример.

 #include #define GREATER (a, b) ((a <b)? b: a) int main (void) {cout << "По-голяма от 10 и 20 е" << GREATER ("20", "10") << "\ t return 0; } 

В горния код обявих макро функция GREATER (), която сравнява и намира по-голям брой от двата параметъра. Можете да забележите, че няма точка и запетая, която да прекрати макроса, тъй като макросът се прекратява само от новия ред. Тъй като макросът е просто подмяна на текст, той ще разшири кода на макроса, където той е извикан.

  • Макросите винаги се дефинират с главни букви, само за да улеснят програмистите да идентифицират всички макроси в програмата, докато четат.
  • Макросът никога не може да бъде членска функция на класа, нито може да има достъп до членовете на данните от който и да е клас.
  • Функцията за макроси оценява аргумента всеки път, когато се появява в неговото определение, което води до неочакван резултат.
  • Макросът трябва да е с по-малък размер, тъй като по-големите макроси ненужно ще увеличат размера на кода.

Ключови разлики между вградени и макроси

  1. Основната разлика между inline и macro е, че вградените функции се анализират от компилатора, докато макросите в програмата се разширяват от препроцесор.
  2. Ключовата дума, използвана за дефиниране на вградена функция, е „ inline “, докато ключовата дума, използвана за дефиниране на макрос, е „ #define “.
  3. След като вградената функция е decalre в клас, тя може да бъде дефинирана или в клас, или извън клас. От друга страна, макросът винаги се определя в началото на програмата.
  4. Аргументът, предаван на вградените функции, се оценява само веднъж, докато компилацията, докато аргументът за макроси се оценява всеки път, когато се използва макрос в кода.
  5. Компилаторът не може да вгражда и разширява всички функции, дефинирани в клас. От друга страна, макросите винаги се разширяват.
  6. Кратката функция, която се дефинира в клас без вградена ключова дума, автоматично се прави вградени функции. От друга страна, Macro трябва да бъде конкретно дефиниран.
  7. Функцията, която е вградена, може да има достъп до членовете на класа, докато макросът никога няма да има достъп до членовете на класа.
  8. За да се прекрати вградена функция, се изисква затворена фигурна скоба, докато макрос се прекратява с началото на нов ред.
  9. Отстраняването на грешки става лесно за вътрешна функция, тъй като се проверява по време на компилация за всяка грешка. От друга страна, макрос не се проверява при компилирането, така че отстраняването на грешки на макрос става трудно.
  10. Като функция, вградената функция обвързва членовете си в старт и затваря фигурни скоби. От друга страна, макросът няма никакъв завършващ символ, така че свързването става трудно, когато макросът съдържа повече от един оператор.

Изводи:

Вградените функции са далеч по-убедителни от макрофункциите. C ++ също осигурява по-добър начин за определяне на константа, която използва ключова дума "const".

Top