文档详情

gcc笔记.pdf

发布:2016-03-11约字共6页下载文档
文本预览下载声明
GCC笔记 The History of GCC 1984年,Richard Stallman发起了自由软件运动,GNU (Gnus Not Unix)项目应运而生,3年后,最 初版的GCC横空出世,成为第⼀款可 植、可优化、支持A NSI C的开源C编译器。 GCC最初的全名是GNU C Com iler,之后,随着GCC支持的语言越来越多,它的名称变成 了GNU Com iler Collection。 这里介绍的gcc是GCC的前端,C编译器. 警告信息 -Wall : 显示所有常用的编译警告信息。 -W : 显示更多的常用编译警告,如:变量未使用、⼀些逻辑错误。 -Wconversion : 警告隐式类型转换。 -Wshadow : 警告影子变量 (在代码块中再次声明已声明的变量) -Wcast-qual :警告指针修改了变量的修饰符。如:指针修改const变量。 -Wwrite-strings : 警告修改const字符串。 -Wtraditional : 警告A NSI编译器与传统C编译器有不同的解释。 -Werror : 即使只有警告信息,也不编译。 (gcc默认:若只有警告信息,则进行编译,若有错误 信息,则不编译) C语言标准 你可以在gcc的命令行中通过指定选项来选择相应的C语言标准: 从传统c到最新的GNU扩展C. 默认 情况下, gcc使用最新的GNU C扩展. -ansi : 关闭GNU扩展中与A NSI C相抵触的部分。 - edantic : 关闭所有的GNU扩展。 -std=c89 : 遵循C89标准 -std=c99 : 遵循C99标准 -std=traditional : 使用原始C 注意:后4个选项可以与-ansi结合使用,也可以单独使用。 可在gcc 中使用大量GNU C扩展. 生成特定格式的文件 以hello.c为例子,可以设置选项生成hello.i, hello.s, hello.o以及最终的hello文件: hello.c : 最初的源代码文件; hello.i : 经过编译预处理的源代码; hello.s : 汇编处理后的汇编代码; hello.o : 编译后的目标文件,即含有最终编译出的机器码,但它里面所引用的其他文件中函数的 内存位置尚未定义。 hello / a.out : 最终的可执行文件 (还有.a(静态库文件), .so(动态库文件), .s(汇编源文件)留待以后讨论) 如果你不通过-o指定生成可执行文件名,那么会默认生成a.out. 不指定生成文件名肯能覆盖你上次 生成的a.out. e.g. $ gcc hello.c 在不给gcc传递任何参数的情况下, gcc执行默认的操作: 将源文件编译为目标文件-- 将目标文件连 接为可执行文件(名为a.out) -- 删除目标文件. -c生成.o文件时,默认生成与源代码的主干同名的.o文件。比如对应hello.c生成hello.o. 但也可在生 成目标文件时指定目标文件名(注意同时要给出.o后缀): $ gcc -c -o demo.o demo.c $ gcc -Wall -c hello.c : 生成hello.o $ gcc -Wall -c -save-tem s hello.c : 生成hello.i, hello.s, hello.o 注意-Wall 选项的使用场合:仅在涉及到编译 (即会生成.o文件时,用-Wall) 多文件编译、连接 如果原文件分布于多个文件中:file1.c, file2,c $ gcc -Wall file1.c file2.c -o name 若对其中⼀个文件作了修改,则可只重新编译该文件,再连接所有文件: $ gcc -Wall -c file2.c $ gcc file1.c file2.o -c name 注意:若编译器在命令行中从左向右顺序读取.o文件,则它们的出现顺序有限制:含有某函数定 义的文件必须出现在含有调用该函数的文件之后。好在GCC无此限制。 编译预处理 以上述的hello.c为例, 要对它进行编译预备处理, 有两种方法: 在gcc 中指定-E选项, 或直接调 用c .gcc的编译预处理命令程序为c ,比较新版本的gcc已经
显示全部
相似文档