【发布时间】:2015-08-19 23:30:42
【问题描述】:
我尝试使用下面的代码使用新变量ForloopCountM 跟踪各个循环的迭代。该代码适用于循环内的循环和一个接一个的循环。但是宏在以下两种情况下失败,我需要帮助我如何解决这个问题并跟踪迭代次数。
void forloopTrace(int ForloopCount)
{
if( ForloopCount==50)
printf("Invalid \n");
}
#define CONCAT_IMPL( x, y ) x##y
#define MACRO_CONCAT( x, y ) CONCAT_IMPL( x, y )
#define FORlOOPCOUNTM MACRO_CONCAT(ForloopCountM,__LINE__)
#define for(args...)\
int FORlOOPCOUNTM=0;\
for(args,FORlOOPCOUNTM++,forloopTrace(FORlOOPCOUNTM))\
int main()
{
int i,j,x,y;
j=100;
y=200;
for(i=0;i<j;i) //works fine
{
i++;
for(x=0;x<y;x) //works fine
x++;
}
if(i>0)
for(;i>0;) //ERROR
i--;
for(;;) //Error
{
i++;
}
return 0;
}
【问题讨论】:
-
点击帖子下方的编辑按钮,将代码放入您的问题中。
-
这不是无限递归的吗?
-
@cup:宏替换是非递归的,即在宏被替换后,相同的宏替换不再应用于替换产生的代码部分。见stackoverflow.com/a/12447739/908515
-
重新定义关键字有issues。很确定它实际上是未定义的行为。