C предварительная обработка нескольких проходов - PullRequest
0 голосов
/ 08 мая 2018

Я немного сбит с толку поведением предварительной обработки в c.

    #include <stdio.h>

#define myMacro anotherMacro

#define anotherMacro 6

int main()
{
    int dummy = myMacro;
    printf("dummy = %d", dummy);

    return 0;
}

в приведенном выше фрагменте кода, результат будет 6. однако расширение макроса на начальном этапе заменит «myMacro» на «anotherMacro». это означает, что препроцессор сделает второй проход, чтобы разрешить «anotherMacro» значение 6.

1 Ответ

0 голосов
/ 08 мая 2018

Препроцессор сделает второй проход. Он работает через строку исходного файла в каждой строке.

Итак, если он достигнет первого, определите

#define myMacro anotherMacro

он заменит все вхождения myMacro на строку anotherMacro .

Файл будет выглядеть после обработки строки:

#include <stdio.h>

#define anotherMacro 6

int main()
{
    int dummy = anotherMacro;
    printf("dummy = %d", dummy);

    return 0;
}

Теперь препроцессор может продолжить со следующей # define
и замените каждый другой Макро текстом 6

...