apue 第七章程序环境

1,程序退出的方式:
8种:5种正常[3种:进程+2种:线程]+3种异常(信号)
1,在main函数中调用return语句!
2,在程序任意位置调用exit函数(ansi) 使用这些函数时头文件之类的不需要记,man一下即可
3,在程序任意位置调用_exit函数(posix)
exit = fflush()+_exit();

exit(参数)

参数:调用程序的程序使用的!相当于return的返回值!

atexit():钩子函数!被exit自动调用!析构函数
1,何时执行:在程序结束时,自动调用!
2,执行顺序:与atexit顺序,相反!

malloc/free:常驻内存程序必须free 书是死的 重在理解

获取全部的环境变量:extern char **environ;
获取指定值: getenv();
修改环境变量/添加: putenv()/setenv();
提示:环境变量中所有保存的内容:字符串!

练习:7.3


栈:自动释放
堆:不会自动释放
static:程序开始执行时,将该段数据清零


长跳转(类似goto,但是可以跨函数跳转)
setjmp:设置跳转点(用于跳转回来)
longjmp:直接跳转到跳转点!


5,库(静态库,动态库)
gcc参数:要求记住10个参数以上!


程序:a.out+库(动态,静态) =结果!
静态库:
gcc -c a.c
gcc -c b.c
gcc -c c.c
gcc -c d.c


ar -crv libxxx.a a.o b.o c.o d.o
ar -sr libxxx.a a.o b.o c.o d.o


程序如果编辑使用静态库:在目标代码中就会包含该库!


动态库:
gcc -fpic -c a.c
gcc -fpic -c b.c
gcc -fpic -c c.c
gcc -shared -fpic -o libxxx.so a.o b.o c.o 


程序如果编辑使用动态库:在目标代码中仅包含该库的路径!程序执行时:自动在/lib查找该库!




gcc参数:
-E: 调用预处理器! .i #
-S:编译c->汇编 .s 名字没有
-c:汇编代码->二进制 .o不是elf
-o:目标文件 ld 生成elf文件
gcc a.c -o abc


-I:增加一条搜索头文件的路径!
-l:编译时加载指定库! 注意:库名:-lxxxgcc -lc
-L:增加一条搜索库文件的路径!


-Wall:编译时添加警告信息!
-g:用于调试(gdb),用于反汇编(objdump) a.out(源代码)
-std=c99:编译时,对c99标准的支持!
-O0~O9:优化编译! -O2
volatile:防止优化!
-DN=9:相当与在预处理时添加:#define N 9


编写makefile生成库(静态库,动态库)
a.h a.c b.h b.c c.h c.c d.h d.c f.h f.c
main.c
makefile
a.out
make: 命令 在当前目录中查看makefile文件
Makefile/makefile: 文件程序编译的过程描述


makefile:
目标:依赖条件
执行的命令


程序出错:
1,编译时出错:
2,执行时出错:死循环,段错

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值