Разлика между Inline и Macro в C ++
Съдържание
Макрос е инструкция, която се разширява в момента на нейното извикване. Функциите също могат да бъдат дефинирани, като макроси. По подобен начин вградените функции също се разширяват в точката на неговото извикване. Една от основните разлики между вградена и макро функция е, че вградени функции се разширяват по време на компилация, и на макроси се разширяват, когато програмата се обработва от предпроцесорни.
Нека да проучим разликата между вграден и макрос с помощта на сравнителна диаграма.
- Сравнителна диаграма
- дефиниция
- Ключови разлики
- заключение
Сравнителна диаграма
Основа за сравнение | В редица | Macro |
---|---|---|
Основен | Вградените функции се анализират от компилатора. | Макросите се разширяват от препроцесора. |
Синтаксис | inline return_type funct_name (параметри) {. , , } | #define macro_name char_sequence |
Използвани ключови думи | в редица | #define |
Дефинирани | Може да се дефинира вътре или извън класа. | Винаги се дефинира в началото на програмата. |
оценка | Той оценява аргумента само веднъж. | Той оценява аргумента всеки път, когато се използва в кода. |
експанзия | Компилаторът може да не вгражда и разширява всички функции. | Макросите винаги се разширяват. |
Автоматизация | Кратките функции, дефинирани в класа, се извършват автоматично върху вградени функции. | Макросите трябва да се дефинират конкретно. |
Достъп | Функцията за вграден член може да получи достъп до членовете на данните от класа. | Макросите никога не могат да бъдат членове на класа и не могат да имат достъп до членовете на данните от класа. |
Прекратяване на договора | Дефиницията на вградената функция завършва с къдравите скоби в края на вградената функция. | Дефиницията на макро приключва с новия ред. |
Отстраняване на грешки | Отстраняването на грешки е лесно за вградена функция, тъй като проверката на грешките се извършва по време на компилация. | Отстраняването на грешки става трудно за макросите, тъй като проверката на грешки не се случва по време на компилация. |
подвързване | Вградена функция свързва всички изрази в тялото на функцията много добре, тъй като тялото на функцията започва и завършва с къдравите скоби. | Макрос е изправен пред проблема за свързване, ако има повече от един оператор, тъй като няма символ за прекратяване. |
Дефиниция на Inline
Вградена функция изглежда като обикновена функция, но е предшествана от ключовата дума „в редица". Вградените функции са функции с къса дължина, които се разширяват в точката на неговото извикване, вместо да бъдат извиквани. Нека разберем вградените функции с пример.
#include В горната програма декларирах и дефинирах функцията Initialize () като вградена функция в клас „пример“. Кодът на функцията за инициализация () ще се разшири, когато се извика от обекта от класа „пример“. Функцията display (), дефинирана в примера на клас, не се декларира в линия, но може да се счита, че е включена от компилатора, като в C ++ функцията, дефинирана вътре в класа, автоматично се прави на линия от компилатора, като се вземе предвид дължината на функцията. Макросът е „директива за препроцесори“. Преди компилиране програмата се преглежда от препроцесора и където някога намери макроса в програмата, тя замества този макрос по негово определение. Следователно макросът се счита за „заместител“. Нека изучим макрос с пример. #include В горния код декларирах макро функция GREATER (), която сравнява и намирам по-големия брой от двата параметъра. Можете да забележите, че няма точка и запетая, която да прекрати макроса, тъй като макросът се прекратява само от новия ред. Тъй като макрос е просто заместване, той ще разшири кода на макроса, където е извикан. Вградените функции са далеч по-убедителни от макро функцията. C ++ също предоставя по-добър начин за дефиниране на константа, която използва ключова дума „const“.
Определение за макрос
Изводи: