Рубрики

Макросы против функций

Макросы предварительно обрабатываются, что означает, что все макросы будут обработаны до компиляции вашей программы. Однако функции не обрабатываются предварительно, а компилируются .

Смотрите следующий пример макроса:

#include<stdio.h>
#define NUMBER 10

int main()

{

     printf("%d", NUMBER);

     return 0;

}

Выход:

 10 

Смотрите следующий пример функции:

#include<stdio.h>

int number()

{

    return 10;

}

int main()

{

    printf("%d", number());

    return 0;

}

Выход:

 10 

Теперь скомпилируйте их с помощью команды:

 gcc –E file_name.c 

Это даст вам исполняемый код, как показано на рисунке:

Это показывает, что макросы предварительно обрабатываются, а функции — нет.

В макросах проверка типов (несовместимый операнд и т. Д.) Не выполняется, и поэтому использование микроэлементов может привести к ошибкам / побочным эффектам в некоторых случаях. Однако это не относится к функциям. Также макросы не проверяют наличие ошибок компиляции (если есть). Рассмотрим следующие два кода:

Макросы:

#include<stdio.h>
#define CUBE(b) b*b*b

int main()

{

     printf("%d", CUBE(1+2));

     return 0;

}

Вывод: неожиданный вывод

7

Функции:

#include<stdio.h>

int cube(int a)

{

     return a*a*a;

}

int main()

{

    printf("%d", cube(1+2));

    return 0;

}

Выход: как и ожидалось

27
  • Макросы обычно одного лайнера. Тем не менее, они могут состоять из более чем одной строки. Нажмите здесь, чтобы увидеть использование. В функциях таких ограничений нет.
  • Скорость, с которой макросы и функции отличаются. Макросы, как правило, быстрее, чем функции, так как они не связаны с реальными издержками вызова функции.

Вывод:
Макросы больше не рекомендуются, поскольку они вызывают следующие проблемы. В современных компиляторах есть лучший способ — встроенные функции и переменная const. Ниже приведены недостатки макросов:

а) нет проверки типа

б) Сложно отлаживать, так как они вызывают простую замену.

в) Макрос не имеет пространства имен, поэтому макрос в одном разделе кода может влиять на другой раздел.

d) Макросы могут вызывать побочные эффекты, как показано выше в примере CUBE ().

MacroFunction
Macro is PreprocessedFunction is Compiled
No Type Checking is done in MacroType Checking is Done in Function
Using Macro increases the code lengthUsing Function keeps the code length unaffected
Use of macro can lead to side effect at later stagesFunctions do not lead to any side effect in any case
Speed of Execution using Macro is FasterSpeed of Execution using Function is Slower
Before Compilation, macro name is replaced by macro valueDuring function call, transfer of control takes place
Macros are useful when small code is repeated many timesFunctions are useful when large code is to be written
Macro does not check any Compile-Time ErrorsFunction checks Compile-Time Errors

Смотрите ниже для более подробной информации о макросах:
Интересные факты о макросах и препроцессорах

Эта статья предоставлена Пранджалом Матуром. Если вам нравится GeeksforGeeks и вы хотите внести свой вклад, вы также можете написать статью и отправить ее по почте на contrib@geeksforgeeks.org. Смотрите свою статью, появляющуюся на главной странице GeeksforGeeks, и помогите другим вундеркиндам.

Пожалуйста, пишите комментарии, если вы обнаружите что-то неправильное или вы хотите поделиться дополнительной информацией по обсуждаемой выше теме.

Рекомендуемые посты:

Макросы против функций

0.00 (0%) 0 votes