总结:来到华清远见第一周,总体可以适应,大概得益于大二时做了几个小项目,但深入了解C高级发现自己在逻辑思考设计程序上存在很大问题,接下来的方向会多研究课上的代码,为保证第一周学到的东西牢记于心,于本周末加以巩固,这一周学的东西实在多,我想我并不能全部总结,但能记住哪怕五成,对自己也是一种提高,但行好事,莫问前程。
注释:本笔记作为根据本周知识进行的自查自学,查漏补缺,便于自身理解,所以会带有个人语数习惯,不是很好的学习导向。
711
编译的四个阶段:
预处理,-E,.i(预处理文件),头文件copy,注释删除,宏定义替换,不进行c检查
编译, -S,.o(生成汇编文件),将c源文件编译成汇编文件,检查c错误
汇编, -c,.s(机器码),注意编译阶段生成汇编文件,汇编阶段则生成机器码二进制
链接, -o(-o表示生成的文件名每个阶段可使用)(可执行文件),将多个库文件目标文件连接在一起生成可执行文件
关于警告与错误
-w忽略警告,-Wall显示所有警告
关于优化(gcc对我们写的冗杂的代码进行优化节省运算时间)
1.首先查看我们程序运行需要的时间
执行文件前输入time
linux@ubuntu:~$ time./hello 即可得到以下介绍
Result is 400002019.000000
real 0m2.359s //整体运行时间
user 0m2.328s //用户代码运行时间
sys 0m0.008s //系统库函数(如printf)代码运行时间
gcc -o hello1 -O1(1级优化)hello.c
常用优化-O2,能在时间效率和空间效率上统一优化
关于调试
断点,查看变量,查看堆栈,查看内存
适用于代码编译正确,但输出结果不尽人意的状况
1 将.c文件生成可执行文件过程,加-g将调试信息写入
gcc -g -o hello hello.c //调试信息写入程序变大
2 gdb hello //进行调试hello
3 调试界面:
查看文件:list(简写l) //默输出下10行代码
设置断点:break 8(b 8) //断点8,程序在运行至第八行停止
运行程序: run (r) //运行至断点处
查看变量:print i (p i) //查看变量i的值
继续运行: c //continue
单步运行:n //next
退出GDB调试:q //quit
遗憾的是,实验课并没有让我完全掌握GDB调试的习惯,不过路还很长,我走的很慢,也愿意一步一步来。
backtrace (bt) //查看堆栈,一般栈顶的函数是出错的函数
disassemble set)array //查看set_array函数的汇编代码