第一个Linux环境下的C语言程序
1.编写程序
2.编译程序
3.运行程序
编译C语言程序
1.gcc编译器
gcc编译器介绍源自百度百科
gcc支持编译的后缀名
后缀名 | 对应语言 | 后缀名 | 对应语言 |
---|---|---|---|
.c | C原始程序 | .ii | 已经过预处理的C++原始程序 |
.C | C++原始程序 | .s | 汇编语言原始程序 |
.cc | C++原始程序 | .S | 汇编语言原始程序 |
.cxx | C++原始程序 | .h | 预处理文件(头文件) |
.m | Objective-C原始程序 | .o | 目标文件 |
.i | 已经经过预处理的C原始程序 | .a/.s | 编译后的库文件 |
命令使用格式
gcc [options] filename-list
2.GCC编译流程
我们通过一个例题来分析其过程
设计一个程序,程序运行时要求输入两个整数,将它们求和后的结果输出。本例通过使用gcc的参数-E,-S,-c,-o控制gcc编译流程,据此了解gcc的编译过程,进而进一步认识gcc的灵活性。
- 用vim编写源程序,生成源程序文件“3-3.c”
- 用gcc的“-E”参数预处理,生成经过预处理的源程序文件3-3.i
- 用gcc的-S参数编译生成汇编语言程序文件“3-3.s”
- 用gcc的-c参数汇编,生成二进制文件3-3.o
- 使用gcc的-o参数处理,把3-3.o和一些用到链接库文件连接成可执行文件3-3.
编写代码
生成经过预处理产生的源程序文件3-3.i
预编译
用gcc的-S参数编译生成汇编语言程序文件“3-3.s”
汇编阶段
链接阶段
gcc编译器的主要参数
- 总体参数
参数 | 含义 | 参数 | 含义 |
---|---|---|---|
-c | 只编译不链接,生成目标文件 | -v | 显示gcc的版本号 |
-S | 只编译不汇编,生成汇编代码 | -I dir | 在头文件的搜索路径中添加dir目录 |
-E | 只进行预编译 | -L dir | 在库文件的搜索路径列表中添加dir目录 |
-g | 在可执行程序中包含调试信息 | -static | 链接静态库 |
-o file | 把文件输出到file中 | -library | 连接名为library的库文件 |
我们以-I dir 参数举例
栗子
设计一个程序,要求把键盘输入的字符串原样输出到屏幕上,把标准输入输出库文件放在自定义的头文件中,源程序文件名为3-4.c,自定义的头文件为my.h保存在 /home/gao中。
在include语句中,“<>”表示在默认路径"/usr/include"中搜索头文件。引号表示在指定目录中搜索。
- 告警和出错参数
参数 | 含义 |
---|---|
-ansi | 支持ANSI的C程序 |
-pedantic | 允许发出ANSI C标准所列出的全部告警信息 |
-pedantic-error | 允许发出ANSI C 标准所列出的全部错误信息 |
-w | 关闭所有告警 |
-Wall | 允许发出gcc提供的所有有用的告警信息 |
-werror | 把所有的告警信息转化为错误信息,并在告警发生时终止编译 |
栗子
设计一个程序,使它包含一些非标准语法。要求打印“aaaa”,通过这个例子熟悉gcc的常用告警和出错参数使用。
- 优化参数
直接看例子
设计一个程序,要求循环8亿次左右,每次都有一些可以优化的加减乘除运算。比较gcc的编译参数-On优化程序前后的运行速度。
点击链接加入群聊【程序员技术交流群】:添加链接描述