大项目源码分析方法总结
来源:互联网 发布: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 )时会报编译错误。
个人观点,欢迎大牛拍砖。
- 大项目源码分析方法总结
- JSP九大内置对象详解(总结+项目源码)
- 大项目源码学习方法
- 仿美团项目学习源码分析(2)---JS之slice()方法
- frostwire项目源码分析
- 项目源码总结
- MapReduce源码分析总结
- memcached 源码分析总结
- MapReduce源码分析总结
- MapReduce源码分析总结
- VLC源码分析总结
- MapReduce源码分析总结
- VLC源码分析总结
- MapReduce源码分析总结
- MapReduce源码分析总结
- MapReduce源码分析总结
- MapReduce源码分析总结
- MapReduce源码 分析总结
- 微信开发:网页授权、跳转至网页
- Linux-命令-crontab
- 新入行程序员应知的十个秘密
- swift学习1 oc swift混编
- 企业应用开发面临的问题以及思考
- 大项目源码分析方法总结
- HDU 3912 Turn Right + HDU 1254 推箱子 + HDU 1983 Kaitou Kid - The Phantom Thief (2)
- [网络流24题] 17 运输问题(网络费用流量,最小费用最大流)
- Cordova android框架详解
- leetcode Balanced Binary Tree 题解
- eclipse配置tomcat,以及部署项目到tomcat(解决项目部署后,webapps中无项目文件问题)
- bootstrap css样式起步
- 增加eclipse的内存
- ios8 UITableView设置 setSeparatorInset:UIEdgeInsetsZero不起作用的解决办法