【 以下文字转载自 BBSDev 讨论区 】
【 原文由 Binary 所发表 】
怎么可能会这样
偶都快疯了
下面是 fill_userlist()的部分代码
偶为了看清楚调试的时候怎么走的流程,把代码已经改了一塌糊涂了:(
totalusernum = 0;
numf = 0;
i=0;
j=0;
tt=0;
while( j<USHM_SIZE) {
tt=0;
i=j; //这个是为了让i从0开始递增,而不是从USHM_SIZE开始递减
// 至于原因,猜想是gcc的优化干的好事
if ( tt=(utmpshm->uinfo[i].active==1 && utmpshm->uinfo[i].pid!=0)) {
tt&tt; //完全是为了看流程,但是被gcc优化掉了:(
//这里在整个while循环中只有第一次的执行是正确的
//i=0时一切正常,但是i=1+的时候,这一句会返回tt=0
// 虽然条件(utmpshm->uinfo[i].active==1 &&
// utmpshm->uinfo[i].pid!=0) 是满足的,应该是 tt=1才对啊
if (tt=(!isreject(&utmpshm->uinfo[i])) ) {
tt&tt;
if (tt=( utmpshm->uinfo[i].invisible!=1 || usernum == utmpshm->uinfo[i].
uid
|| HAS_PERM(PERM_SYSOP | PERM_SEECLOAK) ))
{
tt&tt;
if (tt=friendmode) {
if ( tt=myfriend(utmpshm->uinfo[i].uid) ) {
friendno[numf++]=totalusernum;
user_record[totalusernum++]=&(utmpshm->uinfo[i]);
}
} else {
if ( tt=myfriend(utmpshm->uinfo[i].uid) )
friendno[numf++]=totalusernum;
}
}
}
}
j++;
}
偶已经疯了~~~~~~~~~~~
--
FROM 218.197.216.*