Печать
Категория: Главная
Просмотров: 280

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


В следующем коде вы видите вековую функцию max () :

#include <stdio.h>

int max (x, y)
{
    если (х> у)
        Возвращение (х);
    еще
        возвращать (у);
}

int main ()
{
    int a, b;

    printf («Введите два числа через пробел:»);
    scanf ("% d% d", & a, & b);

    printf ("% d больше \ n", max (a, b));

    Возвращение (0);
}

Вот пример прогона:

Input two numbers separated by a space: 26 88
88 is greater

Макс () функция также может быть записано:

int max (x, y)
{
    return (x> y? x: y);
}

Выход такой же. Тем не менее, кое-что о функции из одной строки кажется мне странным. В примере этого урока функция не обязательна, но предполагается, что max () является частью более длинной программы, в которой она вызывается из нескольких частей кода. Даже тогда однострочная функция выглядит довольно глупо.

В качестве альтернативы, без особого преимущества, так или иначе, вы можете объявить max () как макрос. Используйте #defineдирективу препроцессора в начале файла исходного кода:

#define max(x,y) x > y ? x : y

Чтобы создать этот макрос, я выхватил функцию max () , удалив скобки и точку с запятой в конце оператора. Остается макрос max () , который принимает два аргумента xи y. Аргументы, развернутые в тернарный оператор, показаны выше: сам макрос имеет значение max (x, y) (без пробелов), а все остальное в строке является определением макроса, что будет вставлено в код, в котором появляется макрос ,

Помните: многие «функции», которые вы регулярно используете в C, определяются как макросы, такие как getchar () и putchar () . Тем не менее, они выглядят и работают как функции в коде. Технически это макросы.

На практике я определяю свои макросы как ВСЕ КАПСЫ, точно так же как определенные константы. Таким образом, я знаю, что «функция» - это действительно макрос. Кроме того, я чувствую, что в любом другом, читающем мой код, подсказывает, что MAX () - это макрос, а не функция, на которую они должны охотиться в других местах исходного кода.

В уроке следующей недели я использую различные макросы для выполнения математических операций на двоичном уровне. Именно эта всепоглощающая радость заставляет меня ценить язык Си.