notes 09-02 APUE

本文探讨了C语言中的函数应用,包括atexit函数的使用及错误处理,setjmp与longjmp的工作原理,以及如何正确使用环境变量environ。通过具体代码示例解释了这些函数的功能和注意事项。

Echo $?可以输出程序执行的状态值

Main函数中参数argc和argv。Iso c和posix1都要求 argv[argc]是一个空指针,

Ateixt函数调用与注册相反

#include <stdio.h>

#include <stdlib.h>

void func1()

{

printf("%d\n",printf("%d",printf("%d",5)+1)-1);

}

void func2()

{

printf("%d\n",printf("%d",printf("%d",printf("%d",1)+2))+3);

}

int main()

{

if(atexit(func1)!= 0)

{

printf("atexiterror\n");

return-1;

}

if(atexit(func1) != 0)

{

printf("atexit error\n");

return -1;

}

if(atexit(func2) != 0)

{

printf("atexit error\n");

return -1;

}

exit(0);

}

静态编译的时候 正文段的大小变大,不会使用动态库


Setjmp是获取当前的环境,所以setjmp必须在longjmp之前调用,不然的话,longjmp就不会找到当时的 jmp_buf

#include <stdio.h>

#include <setjmp.h>

static jmp_buf env;

int func1()

{

if(setjmp(env)== 0)

{

// while(1);

printf("setjmphas not jmp\n");

}

else{

printf("setjmpexecute\n");

}

return0;

}

int main()

{

inti=0;

func1();

while(i!= 10)

{

if(i== 6)

{

longjmp(env,1);

}

printf("mainexecute bian :%d\n",i);

i++;

}

return 0;

}

使用environ的时候,必须声明为外部变量extern char * environ

而且environ和argv是一样的最后一个指针是NULL

#include <stdio.h>

#include <unistd.h>

extern char ** environ;

int main()

{

inti=0;

for(;*(environ+i) != NULL;i++)

{

printf("%s\n",*(environ+i));

}

return0;

}

一般都是getenv函数来使用环境变量的(setenv)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值