Макрос в цикле? - PullRequest
       20

Макрос в цикле?

0 голосов
/ 07 октября 2010
for(x;x<crap;x++)
{
    macro(x,y);
}

Как это обрабатывается препроцессором?Этот цикл развернут или что-то еще?

Ответы [ 2 ]

5 голосов
/ 07 октября 2010

Макрос раскрывается до того, как код скомпилирован - не имеет значения, находится ли он в цикле или где-либо еще.

#define macro(x, y) doSomething(x, y)
for(x;x<crap;x++){
    macro(x,y);
}

расширится до:

for(x;x<crap;x++){
    doSomething(x,y);
}

Контекст, окружающий macro(x,y), не влияет на то, как препроцессор его расширяет.

(Препроцессор даже не знает, какой язык программирования вы используете - это может быть C, Python, Brainfuck или письмо вашему менеджеру банка, и он будет расширять макросы точно так же.)

1 голос
/ 07 октября 2010
Макросы

#define можно рассматривать как поиск и замену до того, как произойдет компиляция. Это означает, что все, к чему относится ваш макрос, будет напрямую подставлено в ссылку в вашем коде. Нет, цикл не развернут.

...