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

Автор: Laura McKinney
Дата Створення: 2 Квітень 2021
Дата Оновлення: 10 Травень 2024
Anonim
C++. Урок 5. Отличия С и C++
Відеоролик: C++. Урок 5. Отличия С и C++

Зміст


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

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

  1. Порівняльна діаграма
  2. Визначення
  3. Ключові відмінності
  4. Висновок

Порівняльна діаграма

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


Визначення Inline

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

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

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


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

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

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

#включати #define GREATER (a, b) ((a <b)? b: a) int main (void) {cout << "Більше 10 і 20 є" << GREATER ("20", "10") << " n"; повернути 0; }

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

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

Висновки:

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