版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、大规模集成电路设计应用与实践代码阅读与实践Lecture 3主讲人:胡亚斌E-mail:yabin.hwugmail系列课程之第二次课的回顾关心代码阅读全周期(四个步骤)内发生的事源码,预编译,编译,汇编,链接,运行,修改源码了解目标文件, readelf, objdump 等工具的使用深入理解编译、链接了解程序员眼中的内存模型: 堆 与 栈深入理解 HelloWorld 程序的全生命周期2代码阅读有哪些事3阅读静态源代码,勾勒代码执行流和物理组织图和逻辑组织图。读对程序进行编译,汇编,链接等操作。阅读其代码低层形态。译运行编译得到二进制文件,观察代码运行态。结果与在“读”阶段得到的理解进行对
2、比,剖析。行对代码进行修改,对修改后的代码行为进行预测。改4基本编程元素课程内容1函数与全局变量2循环结构3goto语句4字符及布尔型表达式5控制结构代码阅读方法6基本编程元素5一个完整的程序见本节课实验一原型代码可以参考教材随书关盘实验演示,理解 main 函数参数 argc 与 argv6头文件用于函数、变量的声明。用 #include 格式来引用标准库的头文件(编译器将从标准库目录开始搜索)。用 #include“filename.h” 格式来引用非标准库的头文件(编译器将从用户工作目录开始搜索)。规则和建议必须做头文件保护。在头文件中,尽课程使用前向声明,而不引用其他头文件,以防止头文
3、件引用循环嵌套。建议头文件中只存放“声明”而不存放“定义”。7实例: 头文件8/* * CopyRightYabin Hu, CUG. 2010,10,29. * this is a demo for header file. */#ifndef MY_INCLUDE_FILE_H / 防止 被重复引用#define MY_INCLUDE_FILE_H#include / 引用标准库的头文件#include “” / 引用非标准库的头文件void Function1(); / 全局函数声明class Box / 类结构声明;#endif函数与全局变量9VS2008类视图10基本概念作用域 sc
4、ope生命周期 life cycle11关注代码中的符号或名字全局函数与全局变量具有外部链接(external linkage)的符号在OO编程中,定义在任何类之外规则: 在检查代码时,确保所有只用于单一文件的变量都声明为 static 的。12对变量名的分析关注修饰符static (文件作用域, 程序生命周期)extern (全局作用域,程序生命周期)实验演示13对函数的分析了解函数功用的方法通过函数名猜阅读函数定义之前的注释猜测参数的意义观察函数被调用的方式和返回值阅读函数体代码查阅外部文档14循环结构15while循环16/打开一个文件得到其文件描述符File *fp = fopen(“
5、a.txt”); while(c = getc(pf) != EOF) putc(c, active);/ 这个循环执行了多少次迭代char * p;while(0 = *p & *p = 9)do-while的特殊用法17#define ABORT_PARSE do global_command = 0; yyerrok; if (! () symbol_table:set_scope (symtab_context.top (); symtab_context.pop (); if (interactive | forced_interactive) YYACCEPT; else YYAB
6、ORT; while (0)for循环次数18for(int i = 0; i = nargs; i+)for(int i = 0; i nargs; i+)for(int i = 1; i 0; i-)for(dp = readdir(dd); dp != NULL; dp = readdir(dd)下列for 语句各执行多少次循环for循环与效率19for (i=0; iN; i+)if (condition)DoSomething();elseDoOtherthing();if (condition)for (i=0; iN; i+)DoSomething();elsefor (i=0;
7、 iN; i+)DoOtherthing();break 和 continuebreak用于退出当前循环, 用于循环和switch语句中。continue意味着跳过该语句与循环末尾的所有语句,直接执行下一次循环。20无限循环21for(;).while(1).可通过break语句,goto语句退出GOTO语句22实例1: 操作系统信号处理代码23if (sigaction(SIGHUP, &n_hand, &o_hand) 0) & (o_hand.sa_handler = SIG_IGN) & (sigaction(SIGHUP, &o_hand, &o_hand) 0)goto out;i
8、f (sigaction(SIGTERM, &n_hand, &o_hand) 0) & (o_hand.sa_handler = SIG_IGN) & (sigaction(SIGTERM, &o_hand, &o_hand) 0)goto out;n_hand.sa_handler = SIG_IGN;if (sigaction(SIGPIPE, &n_hand, &o_hand) 0) | (sigaction(SIGXFSZ, &n_hand, &o_hand) sc_state & NCR_DROP_MSGIN) = 0) if (n = NCR_MAX_MSG_LEN) else
9、if (n = 1 & IS1BYTEMSG(sc-sc_imess0)goto have_msg;if (n = 2 & IS2BYTEMSG(sc-sc_imess0)goto have_msg;have_msg:switch (sc-sc_imess0) 字符及布尔型表达式25字符和字符串char, char*, std:string, std:wstringwchar, TCHAR, CStringLPSTR, LPCSTR, LPWSTR, LPCWSTR _T(“hello”)试着回答以下问题:什么是ASCII?什么是Unicode?字符数组与字符串的区别?以上哪些是只在VC编译器
10、上支持的?哪些是STDC 库支持的?这些类型之间可以相互转换吗?如果可以,如何转换?26布尔型bool C语言没有内置这个类型,需要用typedef定义bool 与 BOOL 区别sizeof()BOOL是微软定义的typedef int BOOL。与bool不同,它是一个三值逻辑, TRUE/FALSE/ERROR,返回值为0的整数为TRUE,0为FALSE,-1为ERROR要注意各种语言中的布尔运算与其它运算的优先级问题短路求值27if (argv = NULL | argv1 = NULL | argv2 = NULL)return -1;控制结构代码阅读方法28控制结构代码阅读规则1每
11、次只分析一个控制结构,将它的内容看做黑箱。规则2每个控制结构的控制表达式意义重大,应把控制表达式看做是控制块所包含代码的基础断言。规则3在完成主要控制块的分析后, 要着重观察是否有控制转移指令。如 return, goto, break, continue 和 异常处理。29实例:二分查找(1)30void * bsearch(key, base0, nmemb, size, compar)register const void *key;const void *base0;size_t nmemb;register size_t size;register int (*compar) _P(
12、const void *, const void *);register const char *base = base0;register int lim, cmp;register const void *p;for (lim = nmemb; lim != 0; lim = 1) p = base + (lim 1) * size;cmp = (*compar)(key, p);if (cmp = 0)return (void *)p);if (cmp 0) /* key p: move right */base = (char *)p + size;lim-; /* else move
13、 left */return (NULL);实例:二分查找(2)31void * bsearch(key, base0, nmemb, size, compar)register const void *key; const void *base0;size_t nmemb; register size_t size;register int (*compar) _P(const void *, const void *);register const char *base = base0;register int lim, cmp;register const void *p;for (li
14、m = nmemb; lim != 0; lim = 1) p = base + (lim 1) * size;cmp = (*compar)(key, p);if (cmp = 0)return (void *)p);if (cmp 0) /* key p: move right */base = (char *)p + size;lim-; /* else move left */return (NULL);应该表示查找对象元素数组的开始每一个元素的大小待查找元素的字节大小元素中间的比较操作实例:二分查找(2)32void * bsearch(key, base0, nmemb, size
15、, compar)register const void *key; const void *base0;size_t nmemb; register size_t size;register int (*compar) _P(const void *, const void *);register const char *base = base0;register int lim, cmp;register const void *p;for (lim = nmemb; lim != 0; lim = 1) p = base + (lim 1) * size;cmp = (*compar)(
16、key, p);if (cmp = 0)return (void *)p);if (cmp 0) /* key p: move right */base = (char *)p + size;lim-; /* else move left */return (NULL);在中间定位一个指针将元素与键值比较若找到,返回位置指针向上调整base不清楚有何作用循环结构中的定式和不定式循环不变式: 循环迭代过程中不变33实例:二分查找(3)34void * bsearch(key, base0, nmemb, size, compar)register const void *key;const vo
17、id *base0;size_t nmemb;register size_t size;register int (*compar) _P(const void *, const void *);register const char *base = base0;register int lim, cmp;register const void *p;for (lim = nmemb; lim != 0; lim = 1) p = base + (lim 1) * size;cmp = (*compar)(key, p);if (cmp = 0)return (void *)p);if (cm
18、p 0) /* key p: move right */base = (char *)p + size;lim-; /* else move left */return (NULL);课后作业浏览wiki上关于作用域 与 生存周期 的解释/zh/%E5%8F%98%E9%87%8F_(%E7%A8%8B%E5%BA%8F%E8%AE%BE%E8%AE%A1)从课程网站上下载 lifecycle.cpp 文件写出 a, b, c, d 四个对象的作用域和生存周期;编译运行该程序,写出运行结果,并加以分析。35Perl程序设计语言花儿朵朵之36拉里 沃尔37拉里沃尔(Larry Wall,1949年3月10日)是程序员、系统管理者、语言学家和作家,生于加拿大卑诗省邓肯市。他最
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 豪华住宅装修合同
- 货物招标文件询价要求解读
- 质量保证书样本住宅
- 购销合同包共创辉煌的事业
- 购销合同签订前的准备工作
- 赔偿协议合同的签订与解除规定
- 赛车手医疗救助协议
- 还款能力承诺函
- 透水混凝土垫层选购合同
- 野生动植物的生态奥秘
- 2024年池州市东至县乡镇供电所客户经理招聘10人笔试备考试题及答案解析
- 2024年携手共进:驾校合作经营条款
- 痔疮治疗制剂产业链招商引资的调研报告
- DB1506-T 56-2024高品质住宅小区评价标准1106
- 脓毒血症的急救与护理
- 露天生产矿山生态修复效果评价规范
- 河南省南阳市宛城区2024-2025学年九年级上学期11月期中语文试题
- 清水混凝土模板施工方案
- 部编版五年级语文上册快乐读书吧测试题及答案
- 2023年6月上海高考英语卷试题真题答案解析(含作文范文+听力原文)
- (高清版)WST 408-2024 定量检验程序分析性能验证指南
评论
0/150
提交评论