ctrl - 缩小字体, ctrl + 增大字体
java oracle, oc apple, c# microsoft,C 和 C++,不属于任何公司
3.课程的简介
3.1 课程阶段的简介
Unix/linux系统的基础
=> 主要学习常用的基本命令以及vi编译器的使用
=> 依赖于Unix/linux系统,部分命令和windows相同
标准C语言的语法
=> 主要学习C语言的基本语法
=> 不依赖于具体的操作系统,支持Unix/linux/windows
数据结构和算法
=> 主要学习常用数据结构的特性以及算法的思想
=> 不依赖于具体的编程语言,支持C/C++/...
=> 不依赖于具体的操作系统,支持Unix/linux/windows
Unix/linux系统下的高级C编程
=> 主要学习常用的API函数以及系统原理
(Application Programming Interface)
=> 依赖于具体的操作系统,支持Unix/linux
=> 依赖于具体的编程语言,支持C语言的语法
=> 课程理论时间: 15天左右
目前主流的主机操作系统:Unix/linux/windows系列
windows系列:xp/vista/win7/win8/win8.1/win10
目前主流的移动终端操作系统:android/ios/windows
3.2 uc课程内容的简介
(1)Unix/linux系统的概述以及编程基础;
(2)Unix/linux系统下的内存管理技术;
(3)Unix/linux系统下的文件管理以及目录操作;
(4)Unix/linux系统下的进程管理技术;
(5)Unix/linux系统下的信号处理技术;
(6)Unix/linux系统下的进程间通信技术;
(7)Unix/linux系统下的网络编程技术;
(8)Unix/linux系统下的多线程开发技术;
------------------------------------------------
今天内容:
(1)Unix/linux系统的简介
(2)gcc编译器的使用
(3)多文件结构的编程
(4)常用的预处理指令
(5)环境变量的概念和使用
1.Unix/linux系统的简介
1.1 Unix系统的简介
在1969年,编写操作系统使用的是汇编语言,无论是编写还是维护都非常不方便,贝尔实验室中的肯-汤普逊研发了一门语言叫做B语言,贝尔实验室中的丹尼斯-里奇在B语言的基础上做了修改和扩展,叫做New B语言,后来改名为C语言;
C语言诞生于1972年,在编程语言排行榜占据重要地址
Unix系统诞生于1970年,具有支持多用户、多任务以及多种处理器的特点;
1.2 linux系统的简介
linux系统是一款自由免费开放源代码的类Unix系统;
当前教学环境: Ubuntu12.04版本,是32位的操作系统
www.ubuntu.com
每半年发布一个新版本:4月 10月
2.gcc编译器的使用
2.1 基本概念
gcc原名叫做GNU C Compiler(编译器),支持对C语言的编译,后来对gcc做了扩展,支持了C++/Object-c等语言,于是改名为GNU Compiler Collection(集合);
GNU => GNU is not Unix;
2.2 基本功能(重点)
目前主流的编程都使用高级语言(C、C++等),高级语言编写的代码无法被计算机执行,需要翻译成机器能执行的机器指令,而gcc主要用于将高级源代码文件翻译成最终的可执行文件;
使用gcc编译器从高级源代码文件到最终可执行文件的构建过程主要包含以下4步:
(1)预处理/预编译
- 主要用于实现头文件的扩展以及宏替换等;
(2)编译
- 主要用于实现从高级源代码到汇编语言的翻译;
(3)汇编
- 主要用于实现从汇编语言到机器指令的翻译;
(4)链接
- 主要用于实现目标文件和库文件的链接;
练习:
cc -E 01hello.c -o 01hello.i
cc -S 01hello.i/01hello.c
cc -c 01hello.s/01hello.i/01hello.c
cc 01hello.o/01hello.s/01hello.i/01hello.c
2.3 常用的编译选项
(1)要求掌握的选项
gcc/cc -E
=> 预处理,默认输出到屏幕,用-o来指定输出文件名
gcc/cc -S
=> 编译,将高级源代码翻译成汇编语言文件
gcc/cc -c
=> 汇编,将汇编语言文件翻译成机器指令文件
gcc/cc -o
=> 主要用于指定输出文件名
gcc/cc xxx.c
=> 主要用于编译链接生成可执行文件a.out
(2)要求熟悉的选项
gcc/cc -std
=> 主要用于指定具体的C标准(C89 C99)
gcc/cc -v
=> 主要用于查看gcc的版本信息
gcc/cc -Wall(Warning all)
=> 主要用于尽可能显示所有的警告信息
gcc/cc -Werror
=> 主要用于将警告信息当作错误来处理
(3)要求了解的选项
gcc/cc -g
=> 主要用于生成gdb相关的调试信息
gcc/cc -x
=> 主要用于指定源代码的编程语言
gcc/cc -O
=> 主要用于进行优化处理
(4)扩展的选项
man gcc/cc 表示查看gcc编译器的相关信息
man 命令/函数名 表示查看命令/函数的相关信息
作业:安装英文词典 - 星际译王
2.4 编程相关的常用文件后缀
.h - 头文件 .c - 源文件
.i - 预处理文件 .s - 汇编文件
.o - 目标文件
.a - 静态库文件 .so - 共享库文件
3.多文件结构的编程
3.1 多文件结构的主要组成
.h - 头文件,主要存放函数声明等
.c - 源文件,主要存放函数定义等
.a - 静态库文件,主要实现对功能模块的打包
.so - 共享库文件,主要实现对功能模块的打包
3.2 头文件的详细组成(重中之重)
(1)头文件卫士
#ifndef ...
#define ...
#endif
(2)包含其他头文件
#include
...
(3)进行宏定义
#define PI 3.14
...
(4)结构体的定义以及对数据类型起别名
struct node
{
int data;
struct node* next;
};
typedef struct node Node;
(5)外部变量/函数的声明
extern int num;
void show(void);
练习:
mkdir circle 表示创建circle目录,在circle目录内部编写以下三个文件:
vi circle.h - 声明一个计算圆形周长 和 一个计算圆形面积的函数(circle_length 和 circle_area);
vi circle.c - 实现头文件中两个函数的定义;
vi main.c - 要求用户输入一个半径,调用上述两个函数计算,并打印最终的结果;
扩展:
vi ~/.vimrc文件,编写以下4行指令:
set nu 表示显示行号
set cindent 表示自动缩进
set shiftwidth=4 表示自动缩进大小为4个空格
set tabstop=4 表示设置tab键大小为4个空格
练习:
mkdir add,在add目录中编写以下3个文件:
add.h - 声明一个计算两个int类型参数和并返回的函数,函数名为add_int;
add.c - 实现上述函数的定义;
main.c - 编写main函数,调用上述函数,参数可以任意指定,并将最终的计算结果打印出来;
最后编写Makefile文件;