for(x;x<crap;x++)
{
macro(x,y);
}
预处理器如何处理?这个循环是展开还是其他什么?
答案 0 :(得分:5)
在编译代码之前扩展宏 - 无论是循环还是其他任何地方都无关紧要。
#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 :(得分:1)
#define
宏视为搜索和替换。这意味着您的宏等同于将在代码中的引用中直接替换。不,循环没有展开。