c程序编译分四个阶段:
1、预处理:编译前的准备工作,就是将.c文件转换为.i文件,预处理阶段不编译文件内容。作用就是:把头文件打开。命令:gcc
-o kk.i kk.c -E //kk:文件名
例如:
下面生成的东西就是头文件(#include )里的东西,作用就是先把包含的头文件打开。
# 1 "9.c" # 1 "" # 1 "" # 1 "9.c" # 1 "/usr/include/stdio.h" 1
3 4 # 64 "/usr/include/stdio.h" 3 4 # 1 "/usr/include/sys/cdefs.h"
1 3 4 # 406 "/usr/include/sys/cdefs.h" 3 4 # 1
"/usr/include/sys/_symbol_aliasing.h" 1 3 4 # 407
"/usr/include/sys/cdefs.h" 2 3 4 # 472 "/usr/include/sys/cdefs.h" 3
4 # 1 "/usr/include/sys/_posix_availability.h" 1 3 4 # 473
"/usr/include/sys/cdefs.h" 2 3 4 # 65 "/usr/include/stdio.h" 2 3 4
# 1 "/usr/include/Availability.h" 1 3 4 # 144
"/usr/include/Availability.h" 3 4 # 1
"/usr/include/AvailabilityInternal.h" 1 3 4 # 145
"/usr/include/Availability.h" 2 3 4 # 66 "/usr/include/stdio.h" 2 3
4 # 1 "/usr/include/_types.h" 1 3 4 # 27 "/usr/include/_types.h" 3
4 # 1 "/usr/include/sys/_types.h" 1 3 4
2、编译阶段:将.i文件再生成一个.s文件,.s文件就是汇编码。命令:gcc -o kk.s kk.i -S
例如:
.section __TEXT,__text,regular,pure_instructions .globl _main
.align 4, 0x90 _main: Leh_func_begin1: pushq %rbp Ltmp0: movq %rsp,
%rbp Ltmp1: subq $32, %rsp Ltmp2: movb $-68, -9(%rbp) movl $-68,
-16(%rbp) movl -16(%rbp), �x xorb %cl, %cl leaq L_.str(%rip), %rdx
movq %rdx, %rdi movl �x, %esi movb %cl, %al callq _printf movl
-16(%rbp), �x xorb %dl, %dl leaq L_.str1(%rip), %rdi
3、汇编阶段:就是将的到得汇编码翻译成机器码(就是0和1码)。
命令:Gcc -o kk.o kk.s -c
4、链接静态库
命令:Gcc -o kk kk.o // kk就是最后生成的可执行文件。
二、关键字(32个):是C语言编译器能识别的。有特殊含义的非自定义的字符串。
[code]auto :声明自动变量 一般不使用
double :声明双精度变量或函数
int: 声明整型变量或函数
struct:声明结构体变量或函数
break:跳出当前循环
else :条件语句否定分支(与 if 连用)
long :声明长整型变量或函数
switch :用于开关语句
case:开关语句分支
enum :声明枚举类型
register:声明积存器变量
typedef:用以给数据类型取别名(当然还有其他作用)
char :声明字符型变量或函数
extern:声明变量是在其他文件正声明(也可以看做是引用变量)
return :子程序返回语句(可以带参数,也看不带参数)
union:声明联合数据类型
const :声明只读变量
float:声明浮点型变量或函数
short :声明短整型变量或函数
unsigned:声明无符号类型变量或函数
continue:结束当前循环,开始下一轮循环
for:一种循环语句(可意会不可言传)
signed:生命有符号类型变量或函数
void :声明函数无返回值或无参数,声明无类型指针(基本上就这三个作用)
default:开关语句中的“其他”分支
goto:无条件跳转语句
sizeof:计算数据类型长度
volatile:说明变量在程序执行中可被隐含地改变
do :循环语句的循环体
while :循环语句的循环条件
static :声明静态变量
if:条件语句 [/code]
三、标示符
在编写程序时,需要对变量、函数、宏和其他实体进行命名,这些名字称为标示符,在C语言中标示符可以含有字母、数字、下划线,但是必须以字母或下划线开头。
四、ASIIC
计算机的存储设备作为二进制的存储设备,只能存储二进制的数字,也就是正数,而不能直接存储字符等其他数据,为了能存储字符数据,就必须该所有的字符分配一个代表他的数字,这就是ASIIC码。