Home » 未分类 » Linux C 学习笔记 二

Linux C 学习笔记 二

缓冲区

在程序和输出设备间缓冲数据fflush

 

库函数的使用

静态库:编译时刻将库代码链接到应用程序生成文件较大

共享:程序运行时载入共享库代码

动态:程序中语句需要使用时载入库代码

 

静态库的制作

1、模块化编写库模块

fun.c fun.h 就是说把需要实现的模块分开来写,而不是写在main里面

2、编译生成目标文件

fun.o

gcc -c -o obj/fun.o src/fun.c -Iinclude

3、使用目标文件生成静态库文件

libfun.a

ar -rc 库文件名 目标文件名

eg: ar -rc lib/libfun.a obj/fun.o

 

4、将库文件链接到主程序的目标文件中

libfun.a+main.o

gcc -o bin/main obj/main.o -Llib -lfun

-L 库文件目录路径

-l 库文件 去掉lib 和扩展名

共享库

1、模块化编写库模块

fun.c fun.h 就是说把需要实现的模块分开来写,而不是写在main里面

2、编译生成目标文件

fun.o

gcc -c -o obj/fun.o src/fun.c -Iinclude

3、生成共享库文件

libfun.so

gcc -fPCI -shared -o lib/libfun.so obj/fun.o

4、将库文件链接到主程序目标文件

libfun.so + main.o

gcc -o bin/main obj/main.o -Llib -lfun

5、将共享库配置到当前系统中

1)将共享库拷贝到系统默认库路径下

lib/, /usr/lib

(2)配置当前系统的环境变量

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:lib/

当简称相同的时候,扩展名不一样时,优先选择.so文件

例: libfun.so libfun.a共存优先选择.so文件

 

如何批量化的执行编译过程Makefile

批量化执行文件处理过程

desk:wood nail

make up

wood:tree

cut

nail:iron

burn

使用make执行Makefile文件

默认执行名为Makefile的文件

-f 制定执行的文件名 make -f Makefile.shared

 

当你修改了其中之一的文件时,再次执行make时,它会只能比较文件,只执行编译最新的文件

当你就是想要编译一下的话,那可以编写clean:项目

clean:

rm -rf obj/main.o obj/fun.o

rm -rf bin/main

使用make clean执行清理工作

警告提示

-Wall 打开所有类型语法警告 ,建议使用

-Wchar-subscripts 如果数组使用char类型变量作为下标值,则发出警告

警告warnin

编译有可能成功,会生成输出文件

错误error

语法错误,编译失败

1、编译错误一般为语法错误,容易修改

根据编译器的提示修改错误

追踪法

2、运行错误一般为逻辑错误 int *p=100 把指针强制置为100

printf(“%d”,*p);

则会报运行时错误

a、标记法

printf(“message\n”);

b、添加删除法(注释法)

c、调试法

借助调试工具进行调试debug

gdb工具+vi +gcc/g++ =Linux 下三大工具链

在使用GDB调试工具时要多加一个参数 -g

gcc -g -o sum sum.c

gdb ./bin/sum

 

gdb工具

list/l列出代码

run/r执行到结果

break/b 设置断点

info breakpoints/i b 查看所有断点

delete breakpoints db bumbers删除断点

next/n 单步运行不进入行数

step/s 进入函数

print/p 查看变量值

set variable 变量名=

until/u 直接跳到某行

display 跟踪变量的值

 

代码优化

-O1 线程跳转和延迟退栈优化

-O2 包含O1并进行额外的调整工作

-O3 循环展开以及和处理器特性相关的优化

&&&

&& 逻辑与 0为假 非0为真

& 按位与

|| 逻辑或

|按位或

 

 

C 语言数据类型,只有四种数据类型,C语言是强类型语言,必须定义类型

整型

浮点型

指针

聚合类型(数组和结构)

 

整型

字符(char),短整型(short),整型,长整型(long)

char 0~255

singed char -127~127

unsigned char 0~255

char

数据类型与整型的联系

ASCII码表

char ch=’9′

char ch=9;

进制类型

十进制 100

八进制 0100 —-64

十六进制 0x100 —>256

二进制 0b100 —->4

枚举类型

enum

 

溢出问题,造成数据紊乱

正溢出:超过了最大范围

负溢出:小于最低下限

 

a为整数,b为整数 2者皆为溢出

问:如何判断a+b不溢出

if(a>INT_MAX-b)

{

溢出?

}

标识符

变量名

函数名

宏名

This entry was posted in 未分类. Bookmark the permalink.