#define Func(n) ((n>0) ? (Func(n-1)+1) : 0)
int j=Func(50);
被预编译后:
int j=((50>0) ? (Func(50-1)+1) : 0);
宏表达式中不能出现递归定义,这点区别于函数,因为宏只做简单的文本替换,且只替换一次,如果出现递归定义,就会无法被完全替换,导致后续编译时原宏名被当作函数;
#define Func(n) ((n>0) ? (Func(n-1)+1) : 0)
int j=Func(50);
被预编译后:
int j=((50>0) ? (Func(50-1)+1) : 0);
宏表达式中不能出现递归定义,这点区别于函数,因为宏只做简单的文本替换,且只替换一次,如果出现递归定义,就会无法被完全替换,导致后续编译时原宏名被当作函数;