c语言的知识点复习

c语言的知识点复习

ID:9402847

大小:31.50 KB

页数:9页

时间:2018-04-30

c语言的知识点复习_第1页
c语言的知识点复习_第2页
c语言的知识点复习_第3页
c语言的知识点复习_第4页
c语言的知识点复习_第5页
资源描述:

《c语言的知识点复习》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、最近开始学习《Linux设备驱动程序第三版》,参阅牛人关于嵌入式开发的准备知识点,编写了学习笔记。1、宏尽管在学习C的时候,牛人们往往不厌其烦的教导我们:应该尽量避免使用宏,但是在linux代码中宏的使用却非常普遍。除了移植性好,估计还是方便使然。使用宏最应该注意的是侧效可能引起的副作用,当然没有了类型检测,也是需要特别小心的地方。示例代码:/*写一个宏MAX,输入两个参数并返回较大的一个*/#defineMAX(a,b)((a)>(b)?(a):(b))显然的,语义简单明了。这里用括号避免了侧效,但是得注意a、b类型。2、死循环关于的死循环的使用,牛人们提供了多种写法,一般有如下三种写法:A

2、、while(1)B、for(;;)C、LOOP:gotoLOOP;有时候我也挺郁闷的,怎么会没有统一的写法呢?用哪种好呢?所以也尝试着分析了一下,以下是测试代码,并附上了VC6.0下的反汇编代码:intmain(intargc,char*argv[]){inti=0,j=0;while(1)00401036moveax,10040103Btesteax,eax0040103Djemain+44h(00401054){if(i++==10)0040103Fmovecx,dwordptr[ebp-4]00401042movedx,dwordptr[ebp-4]00401045addedx,100

3、401048movdwordptr[ebp-4],edx0040104Bcmpecx,0Ah0040104Ejnemain+42h(00401052)break;00401050jmpmain+44h(00401054)}00401052jmpmain+26h(00401036)for(;;){if(j++==10)00401054moveax,dwordptr[ebp-8]00401057movecx,dwordptr[ebp-8]0040105Aaddecx,10040105Dmovdwordptr[ebp-8],ecx00401060cmpeax,0Ah00401063jnemain+5

4、7h(00401067)break;00401065jmpmain+59h(00401069)}00401067jmpmain+44h(00401054)LOOP:if(k++==10)004013C0movedx,dwordptr[ebp-0Ch]004013C3moveax,dwordptr[ebp-0Ch]004013C6addeax,1004013C9movdwordptr[ebp-0Ch],eax004013CCcmpedx,0Ah004013CFjneLOOP+13h(004013d3)gotoSTEP_EXIT;004013D1jmpSTEP_EXIT+4(004013d9)go

5、toLOOP;004013D3jmpLOOP(004013c0)STEP_EXIT:return0;}从VC6.0的汇编代码可以看出:B、C的效率是一样的,A多出了3条指令的判断代码,但是一般的情况下,牛人们又建议少使用goto,所以B是最优的选择。下面是GCC的汇编代码(编译环境Ubuntu9.10+GCC4.4.1):.file"test.c".Text.globlmain.typemain,@functionmain:  pushl%ebp  movl%esp,%ebp  subl$16,%esp  movl$0,-4(%ebp)  jmp.L4.L10:  nop.L4:  cmpl$

6、3,-4(%ebp)  sete%al  addl$1,-4(%ebp)  testb%al,%al  je.L10  nop  jmp.L3.L11:  nop.L3:  cmpl$6,-4(%ebp)  sete%al  addl$1,-4(%ebp)  testb%al,%al  je.L11  nop  jmp.L6.L12:  nop.L6:  cmpl$9,-4(%ebp)  sete%al  addl$1,-4(%ebp)  testb%al,%al  je.L12  nop.L8:  movl$0,%eax  leave  ret.sizemain,.-main.ident"G

7、CC:(Ubuntu4.4.1-4ubuntu8)4.4.1".section.note.GNU-stack,"",@progbits可以看出GCC的汇编结果是A、B、C三种方法都一样。3、关于指针指针是C里面最重要的一个概念,其使用也是非常灵活,但是一些定义我总是一下子说不清楚,下面给出示例和解释:示例:用变量a给出下面的定义指向整型数的指针int*a;指向指针的的指针,它指向的指针是指向一个整

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。