Макрос раскрывается до того, как код скомпилирован - не имеет значения, находится ли он в цикле или где-либо еще.
#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 или письмо вашему менеджеру банка, и он будет расширять макросы точно так же.)