- 基础性语言、语法简洁(因为有指针)
- 运算符、数据结构丰富
- 结构化、模块化编程
- 移植性好、执行效率高
- 允许直接对硬件操作
- 知道正确的概念
- 多动手
- 阅读优秀程序段
- 大量联系,刷题
- 难点:数组、指针、函数三种组合,传指针函数、传函数指针;用指针指向数组中某一块空间来进行传参;
- 基本概念
- 数据类型、运算符、表达式
- 输入输出专题
- 流程控制while、if、for等
- 数组
- 指针
- 函数
- 构造类型——结构体、枚举类型等构造出来的类型是实际环境中用的最多
- 动态内存管理——自己定义需要多大空间,这段空间干什么
- 调试工具+调试技巧(gdb、make)
(1) gdb:程序出现段错误,如指针误操作、一块内存空间的误操作,调试程序中看不出来的错误,gdb跟踪,结合printf在某些特定位置检测特殊函数的返回值;(知道大概在哪出现错误,小范围中把代码装进gdb) - 常用库函数——已封装好的函数
注:不同的编译器对于编译的同一份代码结果不同,在gcc编译环境下是一种情况,在其他编译器下结果又是另一种结果。
- 编辑器vim的使用
注:
vi快捷方式——查看函数原型,在vim编辑器中,光标在目标函数下,shift+k即可以看到目标函数的所有内容,回到编辑器里——摁Q。
vim helloworld.c //进入vim编辑器编写程序
- 常见main()函数表示;
void main(void); //编译器不同,main函数返回值类型不同 void main(int argc,char**argv);//char*argv[] int main(int argc,char**argv); //需要传参,用argc、argv接受命令行传参 int main(void); //不需传参用此形式
- 构建一个c程序最少以函数为单位写程序,最少要用到main函数;
- 基本原则:先定义后使用,把变量定义在函数的声明位置,后面使用变量;
- .c源程序——预处理——编译——汇编——链接——可执行文件.out(嵌入式中写法)
- 编译器gcc的使用
gcc经过几步把.c源文件生成可执行文件:
(1)预处理
'#'开头的指令,均在预处理过程中解决
gcc -E helloworld.c //预处理:gcc后加参数-E,附带源文件。后缀.c给gcc看,gcc在整个编译过程中会识别不同的后缀 gcc -E helloworld.c > helloworld.i //把当前预处理结果做重定向保存,放入当前路径下的.i文件中,gcc识别后预处理的文件
(2)编译
gcc -S helloworld.i //gcc对预处理后的.i文件进行编译,会生成.s的文件;用ls指令查看当前文件下的内容
(3)汇编
gcc -c helloworld.s //gcc会对编译好的.s文件进行汇编,默认生成.o的目标文件
(4)链接
gcc helloworld.o -o hello //生成可执行文件,-o后为可执行文件名
(5)运行可执行文件
./hello //表示运行当前路径下的hello可执行程序 Helloworld
总结gcc编译过程:
详细版
简易版:
gcc helloworld.c //跳过细节直接生成a.out可执行文件 ls
gcc helloworld.c -o hello //还可以通过gcc直接对helloworld.c源文件进行-o,生成可执行文件并且可执行文件名为hello ls //查看当前文件下内容 ./hello //./下打印效果一样 Helloworld
make版:找到helloworld这个文件
make helloworld //生成预定义好的变量名cc,默认是gcc;相当于gcc helloworld.c -o生成一个helloworld编程注意问题



