大规模集成电路设计应用与实践.ppt
大规模集成电路设计应用与实践,代码阅读与实践 Lecture 3 主讲人:胡亚斌 E-mail:yabin.hwugmail.com,系列课程之,第二次课的回顾,关心代码阅读全周期(四个步骤)内发生的事 源码,预编译,编译,汇编,链接,运行,修改源码 了解目标文件, readelf, objdump 等工具的使用 深入理解编译、链接 了解程序员眼中的内存模型: 堆 与 栈 深入理解 HelloWorld 程序的全生命周期,2,代码阅读有哪些事,3,4,基本编程元素,课程内容,函数与全局变量,循环结构,goto语句,字符及布尔型表达式,do循环与整型表达式,基本编程元素,5,一个完整的程序,见本节课实验一 原型代码可以参考教材随书关盘 netbsdsrcbinechoecho.c 实验演示,理解 main 函数参数 argc 与 argv,6,头文件,用于函数、变量的声明。 用 #include 格式来引用标准库的头文件(编译器将从标准库目录开始搜索)。 用 #include“filename.h” 格式来引用非标准库的头文件(编译器将从用户工作目录开始搜索)。 规则和建议 必须做头文件保护。 在头文件中,尽课程使用前向声明,而不引用其他头文件,以防止头文件引用循环嵌套。 建议头文件中只存放“声明”而不存放“定义”。,7,实例: 头文件,8,/* * CopyRightYabin Hu, CUG. 2010,10,29. * this is a demo for header file. */ #ifndef MY_INCLUDE_FILE_H / 防止 my_include.h 被重复引用 #define MY_INCLUDE_FILE_H #include / 引用标准库的头文件 #include “anotherheaderbyme.h” / 引用非标准库的头文件 void Function1(); / 全局函数声明 class Box / 类结构声明 ; #endif,函数与全局变量,9,VS2008类视图,10,基本概念,作用域 scope 生命周期 life cycle,11,关注代码中的符号或名字,全局函数与全局变量 具有外部链接(external linkage)的符号 在OO编程中,定义在任何类之外 规则: 在检查代码时,确保所有只用于单一文件的变量都声明为 static 的。,12,对变量名的分析,关注修饰符 static (文件作用域, 程序生命周期) extern (全局作用域,程序生命周期) 实验演示,13,对函数的分析,了解函数功用的方法 通过函数名猜 阅读函数定义之前的注释 猜测参数的意义 观察函数被调用的方式和返回值 阅读函数体代码 查阅外部文档,14,循环结构,15,while循环,16,/打开一个文件得到其文件描述符 File *fp = fopen(“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 (! symtab_context.empty () symbol_table:set_scope (symtab_context.top (); symtab_context.pop (); if (interactive | forced_interactive) YYACCEPT; else YYABORT; while (0),for循环次数,18,for(int i = 0; i 0; i-) for(dp = readdir(dd); dp != NULL; dp = readdir(dd),下列for 语句各执行多少次循环,for循环与效率,19,for (i=0; iN; i+) if (condition) DoSomething(); else DoOtherthing(); ,if (condition) for (i=0; iN; i+) DoSomething(); else for (i=0; iN; i+) DoOtherthing(); ,break 和 continue,break用于退出当前循环, 用于循环和switch语句中。 continue意味着跳过该语句与循环末尾的所有语句,直接执行下一次循环。,20,无限循环,21,for(;) . ,while(1) . ,可通过break语句,goto语句退出,课后作业,浏览wiki上关于作用域 与 生存周期 的解释 http:/zh.wikipedia.org/zh/%E4%BD%9C%E7%94%A8%E5%9F%9F http:/zh.wikipedia.org/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 四个对象的作用域和生存周期; 编译运行该程序,写出运行结果,并加以分析。,22,Perl,程序设计语言花儿朵朵之,23,拉里 沃尔,24,拉里·沃尔(Larry Wall,1949年3月10日)是程序员、系统管理者、语言学家和作家,生于加拿大卑诗省邓肯市。他最为人知的地方,是他设计的编程语言Perl。,Perl的起源,Perl的起源多少有些“意外”。因为其创始人拉里沃尔并不是有意的要编写一门编程语言,事实上,拉里沃尔也不是一位程序员,而是系统专家。当 时拉里沃尔正在负责一个项目,由于要完成某项工作,尽管拉里沃尔曾想用 awk 来完成,但其并不能满足他的需求,结果就是一门新的编程语言要诞生了。,25,Perl的设计哲学 -简单,同Objective-C、PHP、C+等语言一样,生于80后的Perl同样有C语言的血统,同样具有强大的能力及灵活性,相比于那些高级语言 而言,Perl语言直接提供泛型变量、动态数组、Hash表等便捷的编程元素。但真正让程序员们兴奋的还是Perl的简单哲学。 Perl的简单首先表现在其代码量上,相比于其他语言,面对一个稍复杂的问题,用Perl解决也许几行就足以!而编译Perl程序则更加简单,你根 本不需要一些特殊的指令。由于Perl继承了C语言的很多语法规则,所以它的结构非常容易理解(Perl是一种无类型语言),也正由于此,使得其他语言的 程序员能够很快的理解Perl。 当然,Perl的编辑器是开源的免费软件,使用Perl不必担心费用。而且Perl能在绝大多数操作系统运行,可以方便地向不同操作系统迁移。在7月的编程语言排行榜这里有支足球队一文中,我们也将Perl作为后方的主力,而作为后卫球员,基本要求就是要处理球简单。,26,Thank you,