Linux下C编程
Linux下C编程
一。Linux简介 三。指针、函数及自定义数据类型
a) 指针变量
Int *p1,*p2;
Ing *pn;
Pn=&n;
b) 指针运算
Int a[5]={1,2,3,4,5};
Int *p1 = &a[1];
这样指针p1就指向数组a的第二个元素
c) 指针类型转换
首先定义指针变量,然后强制转换
Char *pc;
Int *pi;
Pi=(int *)pc;
d) 指向指针的指针
Int **pp;
e) 函数声明
Int max(int,int);
Int max(int x,int y)
{
Int t;
T=(x>y)?x:y;
Return t;
}
f) 局部变量
Int func()
{
Int I;
}
全局变量
Int x;
Int main()
{
}
g) 变量的静态存储和动态存储
全局变量即是静态变量,定义时就分配存储单元一直到程序结束
函数的形式参数即是动态变量,使用时才分配存储单元。
自动变量auto、外部变量extern、静态变量static、寄存器变量register
默认都是自动变量
Auto int I; auto可以省略
外部变量即已用其他源文件中的变量
静态全局变量表示不能被其他源文件使用,与extern相反。
静态局部变量定义在函数内,但在函数结束后会继续驻留内存,并影响函数的下次调用。
寄存器变量是放在cpu寄存器内,只有自动局部变量可以定义为寄存器变量。
h) 外部函数 可以被其他源文件调用
Extern int add()
{
}
内部函数只能被本文件的函数调用
Static int add()
{
}
i) 函数指针
Void (*p)(int x)
j) 结构体
Struct name
{
Int id;
}
定义结构体
Struct student a;
直接定义结构体变量
Struct
{
Int id;
} a;
结构体初始化
Struct student a = {
23,
};
结构体指针
Struct student *p;
结构体引用
a. id
a->id
(*p)。id
p->id
嵌套结构体
Student.address.zipcode=200000
a)shell变量
$0 脚本名称
$# 命令行参数个数
$* 所有命令行参数
$[1-n] 第1-n个参数
$$ 当前参数的标示符
$! 后台运行的最后一个进程标示符
$? 命令退出状态
二。C语言基础
a) 开发流程
编辑源文件->编译源文件->连接目标文件和库文件->运行
b) 数据类型
有字符型char、整形 int、浮点型 float、双精度浮点型 double、空值 void
获取数据类型的字节数 sizeof
c) 运算符
加+、减-、乘*、除/、取余%、自增++、自减--
++x 等于 x=x+1;
++x先执行加一,再引用数值,x++先引用数值,再加一
d) 关系运算符和逻辑运算符
< > == >= <= !=
&&|| !
e) 位运算符
与& 或| 异或^ 取反~ 左移《 右移》
f) 表达式
If()
{
Statement;
}
Else if()
{
Statement;
}
Else
{
Statement;
}
Switch()
{
Case 常量1:
Statement;
Brea;
Case 常量2:
Statement;
Break;
Default:
Statement;
}
For(表达式1;表达式2;表达式3)
{
Statmennt;
}
While(表达式)
{
Statement;
}
Do
{
Statement;
}
While(表达式)
g) 跳转语句
Break 1)switch中中止某个case 2)循环结束
Continue 结束本次循环
h) 数组
Int array[5]={1,2,3,4,5};
Int b[2][3]={{1,2,3},{4,5,6}};
i) 字符组
Char str[5]={‘h’,’e’,’l’,’l’,’o’};
j) 宏定义
#define PI 3.1415926
#define MAX(a,b) (a>b)?a:b
宏名和形式参数之间不能加参数
k) 文件包含
#include <文件>
在系统目录中找,调用系统库文件
#include “文件名”
在当前目录中招,再找到系统目录中招,用户自己的库文件
l) 条件编译
#if
#else
#endif
#ifdef
#else
#endif
k) 共同体
Union name
{
}
共同体和结构体区别:共同体存储是采用覆盖技术,不同数据类型成员占用同一段内存空间。某一时间点,共同体只能存储某一成员信息。
l) 枚举
Enum week
{
SUNDAY,MONDAY,TUESDAY
}
枚举定义
Enum week w;
枚举引用
A=Tuesday
Print的话,出来时2
四。数据结构
a) 线性表
b) 栈
只允许在一段插入和删除数据的线性表
c) 队列
先进先出的线性表,允许在一段插入,另一端删除
d) 二叉树
e) 查找算法
f) 排序算法
五。文本编辑器
a) 光标移到{,然后输入%,会跳转到匹配的}
b) 自动补全
Pr
Ctrl+p或者ctrl+n
c) 自动缩进
:set cindent shiftwidth=4;
手动缩进
在某行打==
=G所在行到文件底部自动缩进
六。GCC编译器
a) Gcc基本选项
-E 预处理后及停止
-S 编译后停止
-c 编译或汇编源文件
-o file 制定输出文件
b) 警告选项
-Wall 启用所有警告信息
-Werror 发生警告时取消编译操作
-w 禁用所有警告信息
c) 优化选项
-O0 不优化
-O或-O1 基本优化
-O2 除了-O1外,还额外调整
-O3 除-O2外,还处理器优化
-Os 生成最小执行文件,用于嵌入式领域
d) 头文件包含变量和函数声明,不包含定义函数的实现
函数具体是现在库文件中,分为静态库和动态库。
静态库编译连接时将源代码加入到可执行文件中,后缀一般为。a
动态库程序执行时有链接文件加载,一般为。so
七。调试工具
a) 启动gdc
$gdb
退出
Quit
b) 载入程序
$gdc example
(gdb) file example
列出源代码
(gdb) list
执行程序
(gdb) r
断点处继续运行程序
(gdb) c
帮助
(gdb) help
在第九行设置断点
(gdb) b 9
查看断点
(gdb) info break
删除断点
(gdb) d 1
删除制定行上的断点
(gdb) clear 9
禁用和恢复断点
(gdb) disable 1
(gdb) enable 1
查看变量
(gdb) p sume
自动到断点处显示变量
(gdb) display sum
显示变量数据类型
(gdb) whatis x
修改变量值
(gdb) set sum = 100
单步执行程序 step
(gdb) s
继续 next
(gdb) n
退出 return finish
直接退出
(gdb) return
退出前执行完程序
(gdb) finish
执行到某行
(gdb) until
跳转某行
(gdb) j 15
强制调用函数
(gdb) call printf(“”)
查看堆栈信息
backtrace
(gdb) bt
Frame
(gdb) f 1
查看当前栈信息
(gdb) info frame
查看源程序信息
(gdb) info source
查看寄存器
(gdb) info registers
查看汇编代码
(gdb) disassemble printinfo
八。多文件项目管理Make,makefile,automake
九。Linux C基本应用