从helloword说起

#include <stdio.h>
int main(int argc, char* argv[])
{
    printf("Hello World!\n");
    return 0;
}
1. main函数的原型,以下形式较为正规
int main(void)
int main(int argc, char* argv[])
int main(int argc, char* argv[], char* env[])
#if 0
/*显示argv和env的内容**/
#include <stdio.h>
int main(int argc, char* argv[], char* env[])
{
int i = 0;
for(i=0;argv[i]!=NULL;i++)
{
printf("argv[%d]=%s\n",i,argv[i]);
}
for(i=0;env[i]!=NULL;i++)
{
printf("env[%d]=%s\n",i,env[i]);
}
return 0;
}
#endif
环境变量是从父进程继承过来的,通过setenv和getenv等函数可以存取环境变量,但对环境变量的修改只会影响当前进程及子进程,而不会影响父进程。

2. main函数的返回值
main函数的返回值是返回给父进程的,父进程调用下列函数来获取子进程的退出码(main函数的返回值)。
pid_t wait(int *status);
pid_t waitpid(pid_t pid, int *status, int options);

3. 被隐藏的细节
strace分析helloworld的执行过程

4. printf不见了

5. 链接了哪些共享库
ldd查看helloworld链接的共享库。

6. 调用共享库中的函数

7. 函数的解析过程
LD_DEBUG是一个很有用的环境变量

8. 托梁换柱

9. 内存模型

10.main函数不是第一个执行的函数
_start才是程序的入口,它先构造进程中的全局对象,执行一些初始化函数,然后调用main函数,最后析构全局对象,执行一些退出函数。

参考:《系统程序员成长计划》   9.3 HelloWord不能不说的十大秘密
          《深入浅出HelloWord》    黄敬群
          《深入理解计算机系统》

转载于:https://my.oschina.net/wolflion/blog/103598

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值