Рекомендуємо, 2024

Вибір Редакції

Різниця між Inline і Macro в C ++

Макро - це інструкція, яка розширюється під час виклику. Функції також можуть бути визначені, як макроси. Аналогічно, вбудовані функції також розширюються в точці його виклику. Однією з основних відмінностей між вбудованою і макро функцією є те, що вбудовані функції розширюються під час компіляції, а макроси розширюються, коли програма обробляється препроцесором .

Давайте вивчимо різницю між вкладеним і макросом за допомогою діаграми порівняння.

Діаграма порівняння

Основа для порівнянняВ лініюМакрос
ОсновнийВбудовані функції обробляються компілятором.Макроси розширюються препроцесором.
Синтаксисinline return_type funct_name (параметри) {. . . }#define macro_name char_sequence
Використані ключові словав лінію
#define
ВизначенийВін може бути визначений всередині або поза класом.Він завжди визначається на початку програми.
ОцінкаВін оцінює аргумент лише один раз.Він оцінює аргумент кожного разу, коли він використовується в коді.
РозширенняКомпілятор може не вбудовувати і розширювати всі функції.Макроси завжди розширюються.
АвтоматизаціяКороткі функції, визначені всередині класу, автоматично робляться на вбудовані функції.Макроси повинні бути конкретно визначені.
ДоступФункція вбудованого члена може отримати доступ до членів даних класу.Макроси ніколи не можуть бути членами класу і не можуть отримати доступ до членів класу.
ПрипиненняВизначення вбудованої функції закінчується фігурними дужками в кінці вбудованої функції.Визначення макросу закінчується новою лінією.
НалагодженняНалагодження легко для вбудованої функції, оскільки перевірка помилок виконується під час компіляції.Налагодження стає важким для макросів, оскільки під час компіляції не відбувається перевірка помилок.
Прив'язкаВбудована функція дуже добре пов'язує всі твердження в тілі функції, а тіло функції починається і закінчується фігурними дужками.Макрос стоїть перед проблемою прив'язки, якщо він має більше одного оператора, оскільки він не має символу завершення.

Визначення Inline

Функція inline виглядає як звичайна функція, але передує ключовому слову " inline ". Вбудовані функції - це функції короткої довжини, які розгортаються в точці виклику, а не викликаються. Давайте зрозуміємо вбудовані функції з прикладом.

 #include з використанням простору імен std; Приклад класу {int a, b; public: inline void ініціалізують (int x, int y) {a = x; b = y} void display () {cout << a << "< 

У наведеній вище програмі я оголосив і визначив функцію ініціалізації (), як вбудовану функцію в класі “example”. Код функції ініціалізації () розшириться там, де він викликається об'єктом класу "example". Функція display (), визначена в прикладі класу, не оголошується вбудованою, але її може вважати вбудований компілятором, У C ++ функція, визначена всередині класу, автоматично вбудовується компілятором з урахуванням довжини функції.

  • Функція inline зменшує накладні витрати на виклик функції і повернення, що в свою чергу скорочує час виконання програми. Крім того, аргументи висуваються на стек і регістри зберігаються, коли функція викликається і скидається, коли функція повертається, що вимагає часу, це уникнути вбудованими функціями, оскільки не потрібно створювати локальних змінних і формальних параметрів щоразу .
  • Вбудовані функції можуть бути членом класу і можуть також отримати доступ до члена даних класу.
  • Вбудована функція зменшує час виконання програми, але іноді, якщо довжина вбудованої функції більше, то розмір програми також збільшиться через дубльований код. Отже, добре вбудовувати дуже малі функції.
  • Аргумент вбудованої функції оцінюється тільки один раз.

Визначення макросу

Макро - це "директива препроцесора". Перед компіляцією програма перевіряється препроцесором і там, де він знаходить макрос у програмі, він замінює цей макрос своїм визначенням. Отже, макрос розглядається як «заміна тексту». Дослідимо макрос з прикладом.

 #include #define GREATER (a, b) ((a <b)? b: a) int main (void) {cout << "Більше 10 і 20" << GREATER ("20", "10") << "\ t return 0; } 

У наведеному вище коді я оголосив макро функцію GREATER (), яка порівнює і знаходить більшу кількість обох параметрів. Можна спостерігати, що немає крапки з комою для завершення макросу, оскільки макрос припиняється тільки новою лінією. Оскільки макрос - це просто заміна тексту, він розширить код макросу, де він викликається.

  • Макроси завжди визначаються великими літерами, щоб полегшити програмістам визначити всі макроси в програмі під час читання.
  • Макрос ніколи не може бути функцією-членом класу, а також не може отримати доступ до членів даних будь-якого класу.
  • Функція макросу оцінює аргумент кожного разу, коли вона з'являється у визначенні, що призводить до несподіваного результату.
  • Макрос має бути меншого розміру, оскільки великі макроси невиправдано збільшать розмір коду.

Ключові відмінності між вбудованим і макрозображенням

  1. Основна відмінність між вбудованим і макросом полягає в тому, що вбудовані функції обробляються компілятором, тоді як макроси в програмі розширюються препроцесором.
  2. Ключове слово, яке використовується для визначення вбудованої функції - " inline ", тоді як ключове слово, яке використовується для визначення макросу, є " #define ".
  3. Після того, як вбудована функція є decalre всередині класу, вона може бути визначена або всередині класу або поза класом. З іншого боку, макрос завжди визначається на початку програми.
  4. Аргумент, переданий вбудованим функціям, оцінюється тільки один раз під час компіляції, тоді як аргумент макросів оцінюється кожного разу, коли в коді використовується макрос.
  5. Компілятор може не вбудовувати і розширювати всі функції, визначені всередині класу. З іншого боку, макроси завжди розширюються.
  6. Короткі функції, які визначені всередині класу без вбудованого ключового слова, автоматично робляться вбудованими функціями. З іншого боку, макрос повинен бути визначений конкретно.
  7. Функція, яка є вбудованою, може отримати доступ до членів класу, тоді як макрос ніколи не може отримати доступу до членів класу.
  8. Для завершення вбудованої функції необхідна закрита фігурна дужка, тоді як макрос припиняється з початку нового рядка.
  9. Налагодження стає простим для функції inlne, оскільки вона перевіряється під час компіляції для будь-якої помилки. З іншого боку, макрос не перевіряється під час компіляції, тому налагодження макросу стає важким.
  10. Будучи функцією, вбудована функція зв'язує своїх членів у старті і закриває фігурні дужки. З іншого боку, макрос не має будь-якого символу завершення, тому зв'язування стає складним, коли макрос містить більше, ніж одну операцію.

Висновки:

Вбудовані функції набагато більш переконливі, ніж макро функція. C ++ також забезпечує кращий спосіб визначення константи, яка використовує ключове слово "const".

Top