一 了解操作系统
GNU/LINIX操作系统
ubuntu linux内核+GNU应用程序+自己开发了一些小程序
套件
unix linux windows macos ios andorid
XENIX informix
磁盘的管理
内存的管理
进程的管理
网络通讯
中断管理
终端管理
驱动 …
帮助的获取
man command
man 1 command ls(1)
man 3 printf printf(3)
man 2 open open(2)
二 计算机语言的发展史
机器语言 汇编语言 C语言
从源文件到可执行程序,中间经历了哪些过程?
$? 最近程序运行的返回值
echo 字符串 将字符串输出到显示器
预处理器 编译器 汇编器 链接器
预处理的过程做了什么?
1 注释的消除
2 预处理指令的执行
在C语言的源程序中所有以#开头的都是预处理指令.
#include
#define
#if …#else…#endif
gcc -E hello.c -o hello.i
#include <>和""的区别
“” 先在当前路径下找头文件,如果找不到,到系统指定的路径下找.如果还找不到报错
<> 在系统指定的路径下找,找不到报错.
系统指定的路径是什么?
将预处理后的程序编译为汇编语言的文件
gcc -S hello.i -o hello.s
将汇编语言文件汇编为目标文件
gcc -c hello.s
将目标文件和库函数 运行时文件进行链接,形成可执行文件
gcc hello.o
./a.out
什么是链接?
什么是运行时文件?
函数库?
三 大型项目的构架
合作开发 团队
需要将一个大型的产品分为多个模块来开发.
5个人写一本书
书的目录
合作的参照规则 协议
头文件
分工 将模块分配给多个人
每个模块就是一个源程序.
编写头文件
#ifndef XXX //头文件卫士
#define XXX
//函数的声明
//类型的定义
//文件的包含
//宏定义
//变量的声明
#endif
.c
#include “tt.h”
#include “tt.h”
变量的声明和变量的定义区别
变量的定义是要为变量分配空间的.变量的声明是不需要分配空间.
其实变量的声明是变量作用域的扩充.
extern int val;
int t_add(){
val;
};
int val=300;
int main(void){
val;
return 0;
}
实例说明 创建一个文件夹 t_math
tarena@ubuntu:~/uc/day02/t_math$ ls
add.c add.o a.out main.c main.o mul.c mul.o p_math.h
tarena@ubuntu:~/uc/day02/t_math$ nm add.o
00000000 T t_add
0000000d T t_sub
tarena@ubuntu:~/uc/day02/t_math$ nm mul.o
0000000c T t_div
00000000 T t_mul
tarena@ubuntu:~/uc/day02/t_math$ nm main.o
00000000 T main
U printf
U t_add
U t_mul
静态链接