让大家见识一下新一代分析源代码生成流程图的东东吧
源代码有点复杂,只是形式不用在意执行意义,它只是展示大部分所有的语法点:循环及其break和continue、goto、分支、try...catch等等,应有尽有。
是不是比单纯看代码容易很多?
int SocketAgent::DataReceiver(char *data)
{
SocketAgent *a;
int ret=0,pos,len,count;
int buff[1024];
int *i_data=(int *)data;
len=0;
do{
if(i_data[len]=='a')
{
while(i_data[len] && len<1024)
{
if(i_data[len]=='\r')
{
len++;
continue;
}
if(i_data[len]=='\n')
break;
}
}
}while(len<1024);
for(int i=0,pos=0,count=0;i<1024;i++)
{
if(i_data[i]!='q')
buff[pos++]=i_data[i];
if(i_data[i]=='b')
{
break;
}
else
count++;
if(i_data[i]==T_ERROR)
{
goto _exit;
}
}
try{
if(len>=1024)
throw("throw out");
}catch(char *error)
{
ShowMessage(error);
}
switch(count)
{
case 1:
ret=100;
break;
case 2:
ret=200;
break;
default:
ret=300;
break;
}
return ret;
_exit:
ret=1001;
return ret;
}
再看看分析后的流程图{
SocketAgent *a;
int ret=0,pos,len,count;
int buff[1024];
int *i_data=(int *)data;
len=0;
do{
if(i_data[len]=='a')
{
while(i_data[len] && len<1024)
{
if(i_data[len]=='\r')
{
len++;
continue;
}
if(i_data[len]=='\n')
break;
}
}
}while(len<1024);
for(int i=0,pos=0,count=0;i<1024;i++)
{
if(i_data[i]!='q')
buff[pos++]=i_data[i];
if(i_data[i]=='b')
{
break;
}
else
count++;
if(i_data[i]==T_ERROR)
{
goto _exit;
}
}
try{
if(len>=1024)
throw("throw out");
}catch(char *error)
{
ShowMessage(error);
}
switch(count)
{
case 1:
ret=100;
break;
case 2:
ret=200;
break;
default:
ret=300;
break;
}
return ret;
_exit:
ret=1001;
return ret;
}
是不是比单纯看代码容易很多?