大项目源码分析方法总结

来源:互联网 发布:linux 查看几个cpu 编辑:程序博客网 时间:2024/06/05 08:28

C/C++/Java中的流程控制

通常有for,while,if,switch,以及三元运算符?用于控制程序流程。

在项目中加入以下代码,重新编译后则每次运行进入循环时都会打印出正在执行的代码所在文件和行号。

#include <stdio.h>
#define for  if(fprintf( stderr, "****[%s:%d]\n",__FILE__,__LINE__))for
#define while(a)  while((fprintf( stderr, "****[%s:%d]\n",__FILE__,__LINE__))&&(a))

这在分析大型软件时十分有用,因为大型软件通常按照框架设计,比较容易扩展,因此在处理各种资源上需要使用到遍历。特别是内核这种程序,需要通过遍历去搜索设备,必然离不开for和while的使用。

1如果我们将第一个宏定义为#define for  fprintf( stderr, "****[%s:%d]\n",__FILE__,__LINE__);for

那么,我们遇到两层for循环“for()for()”时,会被替换成两个for循环,这样显然是错误的。

fprintf( stderr, "****[%s:%d]\n",__FILE__,__LINE__)返回的是打印出的字节数,相当于在此处定义了#define for  if(true)for,能够很好适应两层for循环的满足要求。


2如果第二个宏被定义为#define while(a)  while((fprintf( stderr, "****[%s:%d]\n",__FILE__,__LINE__))&&a)

那么因为运算符的优先级问题,在while ( i <<= 1 )时会报编译错误。




个人观点,欢迎大牛拍砖。


0 0