Linux环境下编译C语言程序

.思维导图Linux环境下编译C语言程序_第1张图片

.Linux下对C语言程序编译的四个步骤

使用gcc把C文件编译成可执行文件可分为四步:预编译、编译、汇编、连接。

1、预编译(生成.i文件)

预编译器cpp把源文件和相关的头文件(如实例代码中的头文件stdio.h)预编译成一个.i的文件。

执行的命令:gcc -E hello.c -o hello.i

预编译的作用:

a、处理所有的“#include”预编译指令

b、处理所有的"#define"指令,将代码中所有的"#define"删除,并展开所有的宏定义

c、处理所有的条件预编译指令,如#if #elif #else #ifdef #ifnodef #endif等

d、删除所有的注释

e、添加行号和文件名标识,以便产生错误时给出提示信息

2、编译(生成.s文件)

编译器gcc把预处理后的文件进行语法分析、语义分析以及优化后生成汇编代码文件。

执行的命令:gcc -S hello.i -o hello.s

3、汇编(生成.o文件)

汇编器把汇编代码文件转换成中间目标文件

执行的命令:gcc -c hello.s -o hello.o 

4、链接(生成可执行文件)

链接器ld把目标文件与所需要的所有的附加的目标文件(如静态链接库、动态链接库)链接起来成为可执行的文件

执行的命令:gcc hello.o -o hello.out

Linux环境下编译C语言程序_第2张图片

 三.宏定义

1.宏定义是由源程序中的宏定义命令完成的。

2.宏代换是由预处理程序自动完成的。

3.宏定义是用宏名来表示一个字符串,在宏展开时又以该字符串取代宏名,这只是简单的一种代换,字符串可以含任何字符,可以是常数,也可以是表达式,预处理程序对它不做任何检查,如有错误,只能在编译已被宏展开后的源程序发现。

4.宏定义不是说明或语句,在行末不必加分号.

5.宏定义 必须写在函数外面,其作用域为宏定义命令起到源程序结束。

例:Linux环境下编译C语言程序_第3张图片

 四.标准输入输出函数

函数原型
int printf(const char *format, ...);
printf使用时,需要一个格式符和一个格式符对应类型的数据
printf("占位符/格式符",输出表象);   //有一个格式符就要有一个输出表象
printf("%d\n",10);  //10就是输出表象,%d就是10对应的格式符
printf("%c",'c');  //字符c时输出表象,%c是字符c对应的格式符
 
转义字符,就是有特殊意义的字符
\n:换行      10 
\t:制表符    一个tab键的大小4个空格
\b:退格
\r:回车      回退到行首进行输出
\\:输出一个\,键盘上回车上面的\反斜杠,不是除号
 
格式符
%d:整形数据的格式符
%-nd:以n个数据宽度左对齐输出,不够就补空格
%nd:以n个数据宽度右对齐输出,不够就补空格
%ld:长整型数据的格式符
%f:浮点型的格式符,printf默认输出小数点后6位
%.mf:指定小数点后的输出位数
%lf:双精度浮点型的格式符
%c:字符型的格式符
%s:字符串的格式符
%#x:输出十六进制,并且带前导符0x,小写x,输出十六进制时对应的字母都是小写的
%#X:输出十六进制,并且带前导符0X,大写x,输出十六进制时对应的字母都是大写的
%%:  输出一个% 

五.进制转换

0111 1100B ----> 124D

93D ------>  101 1101B

153D -----> 0x99

1010 0001B -----> 0241

1011 1000B ------>0xB8

你可能感兴趣的:(linux,c语言,运维)