入口 gcc-4.6.0/gcc/gcc.c
来源:互联网 发布:逆战刷枪软件永久教程 编辑:程序博客网 时间:2024/06/06 12:22
gcc程序入口。分析gcc工作流程的起点。
示例:
执行命令:
/usr/bin/gcc -o /home/malele/hello.o /home/malele/hello.c
main函数
----------------------------
输入: int argc,参数个数;
char **argv,参数,字符串数组。
输出:
----------------------------
执行过程:
1, 处理第一个参数:arg[0]:"/usr/bin/gcc". 提取程序名称"gcc", 从后往前扫描arg[0],用方法xmalloc_set_program_name()[./libiberty/xmalloc.c Line106]记录之. 方法IS_DIR_SEPARATOR(ch) [./libiberty/basename.c Line36/38]用于判断是否为目录分隔符(linux下"/",windows下"\\").
2, 展开@参数:
expandargv(&argc, &argv) [./libiberty/argv.c Line 383]. 该函数处理文件名列表中以@开头的参数,并将其展开为实际的文件名。
3, 将参数全部存储到数组中:
- /*将main函数中的argc,argv存储的命令行选项信息存储到数组中, 指针*DECODED_OPTIONS指向这个数组, *decoded_options_count指向用于表示数组大小的数值. 数组的第一项是命令行命令中的程序名称(OPT_SPECIAL_program_name,如gcc)*/
- //main调用
- decode_cmdline_options_to_array (argc, CONST_CAST2 (const char **, char**,argv),CL_DRIVER,&decoded_options, &decoded_options_count);
- //定义
- void
- decode_cmdline_options_to_array (unsigned int argc, const char **argv,
- unsigned int lang_mask,
- struct cl_decoded_option **decoded_options,
- unsigned int *decoded_options_count)
----------------------------
----------------------------
备注:
1,ftell函数,标准库函数,获取当前输入流指针位置
2,gcc [@files] , 参数files中存储了gcc的命令行参数;编译器会将文件中的内容读出并作为gcc参数来代替@files参数。files中可能还会有@声明,编译器递归处理。gcc最多能处理2000个@命令,详见[./libiberty/argv.c Line391].。
- 入口 gcc-4.6.0/gcc/gcc.c
- gcc-4.6.0/gcc/gcc.c#main
- gcc/
- gcc
- gcc
- gcc
- GCC
- gcc
- GCC
- gcc
- gcc
- GCC
- gcc
- Gcc
- gcc
- gcc
- GCC
- gcc
- Ubuntu实用学习教程
- android悬浮窗口的实现
- 16_Struts2.x概述
- 安装Windows phone 8 SDK 的过程以及问题
- Android UI 背景色渐变
- 入口 gcc-4.6.0/gcc/gcc.c
- java认证考试
- 使用MD5对密码进行加密
- weblogic
- jq trigger
- 探察RUNTIME_CLASS之类的秘密
- <原>关键帧动画CAKeyframeAnimation
- API:System V & POSIX
- keepalive+mysql 主主配置