最近在做程序分析模块,需要对源代码进行分析,从而得出该源代码的相对权值,用这个相对权值代表该程序的相对复杂程度。基本思想是顺序分需程序代码,而在分析块位置时,由于想用一个函数返回2个值,因此想到了指针,代码如下:
- ..........
- int if块分支数(int if位置,int *if终点)
- {
- int 分支 = 1;
- int 块结束下一位置 = 块后面一个单词(分析if起点(if位置));
- while(0==strcmp("else",wordTab[块结束下一位置]))
- {
- 分支++;
- if(0 == strcmp("if",wordTab[块结束下一位置+1]))
- {
- 块结束下一位置 = 块后面一个单词(分析if起点(块结束下一位置+1));
- }else
- {
- break;
- }
- }
- *if终点 = 块结束下一位置-1;
- return 分支;
- }
- main()
- {
- .......
- case 15://if
- {
- int if结束点=0;
- 分析if起点(当前分析点);
- printf("/n该if语句分支数:%d,结束位置:%d",if块分支数(当前分析点,if结束点),if结束点);
- 当前分析点 = if结束点;
- break;
- }
- ......
- }
但运行输出,if结束位置一直为0,查了"if结束点"这个局部变量的地址,确实传递进去了,并且值也得到了改变。解决方案:后来想到C语言语句执行顺序的问题,进行了这个改变:
- ..........
- int if块分支数(int if位置,int *if终点)
- {
- int 分支 = 1;
- int 块结束下一位置 = 块后面一个单词(分析if起点(if位置));
- while(0==strcmp("else",wordTab[块结束下一位置]))
- {
- 分支++;
- if(0 == strcmp("if",wordTab[块结束下一位置+1]))
- {
- 块结束下一位置 = 块后面一个单词(分析if起点(块结束下一位置+1));
- }else
- {
- break;
- }
- }
- *if终点 = 块结束下一位置-1;
- return 分支;
- }
- main()
- {
- .......
- case 15://if
- {
- int if结束点=0;
- 分析if起点(当前分析点);
- printf("/n该if语句分支数:%d",if块分支数(当前分析点,if结束点));
- printf("/n结束位置:%d",if结束点);
- 当前分析点 = if结束点;
- break;
- }
- ......
- }
得到了正确的输出,啥子原因呢?难道printf从右往左输出?还是先进行了缓存?知道的大侠,请指导~