一、C语言预处理
1、由源码到可执行程序的过程如下:
- 源码.c->(编译)->elf可执行程序
- 源码.c->(编译)->目标文件.o->(链接)->elf可执行程序
- 源码.c->(编译)->汇编文件.S->(汇编)->目标文件.o->(链接)->elf可执行程序
- 源码.c->(预处理)->预处理过的.i源文件->(编译)->汇编文件.S->(汇编)->目标文
件.o->(链接)->elf可执行程序 - 预处理用预处理器,编译用编译器,汇编用汇编器,链接用链接器,这几个工具再加上其他一些额外的会用到的可用工具,合起来叫编译工具链。gcc就是一个编译工具链。
2、#include <>和#include ""的区别
- <>专门用来包含系统提供的头文件(就是系统自带的,不是程序员自己写的)
- ""包含的头文件,编译器默认会先在当前目录下寻找相应的头文件,如果没找到然后再到系统指定目录去寻找,如果还没找到则提示文件不存在
二、条件编译
1、#ifdef、#else、#endif使用
#include "stdio.h"
//#define NUM 1
#define NUM
int main(void)
{
int a = 0;
#ifdef NUM // 如果前面有定义NUM这个符号,成立
a = 12;
printf("#ifdef NUM.\n");
#else // 如果前面没有定义NUM这个符号,则执行下面的语句
a = 222;
printf("#elif.\n");
#endif
printf("a = %d.\n", a);
}
2、#if、#else、#endif的使用
#include "stdio.h"
#define NUM 1
int main(void)
{
int a = 0;
#if (NUM == 0) // 如果前面有定义NUM这个符号,成立
a = 111;
printf("#ifdef NUM.\n");
#else // 如果前面没有定义NUM这个符号,则执行下面的语句
a = 222;
printf("#elif.\n");
#endif
return 0;
}
3、#if、#elif、#endif和#if、#else if、#endif的使用
- #if、#elif、#endif的使用
#include "stdio.h"
int main(void)
{
#if 0 // 在文本替换中,需要满足非0即true的情况下就会执行此代码
printf("写法一 \n");
#elif 5 // 在文本替换中,需要满足非0即true的情况下就会执行此代码
printf("写法一 elif\n");
#endif // 在文本替换中,这里面的代码一定会执行的
printf("写法一 endif\n");
return 0;
}
- #if、#else if、#endif的使用
#include "stdio.h"
int main(void)
{
#if 0 // 在文本替换中,需要满足非0即true的情况下就会执行此代码
printf("写法一 \n");
#else if 5 // 在文本替换中,需要满足非0即true的情况下就会执行此代码
printf("写法一 else if\n");
#endif // 在文本替换中,这里面的代码一定会执行的
printf("写法一 endif\n");
return 0;
}
三、宏定义
1、当一个数字直接出现在程序中时,它的是类型默认是int
#include "stdio.h"
#define SEC_PER_YEAR (31506000)
int main(void)
{
unsigned int l = SEC_PER_YEAR;
printf("l = %u.\n", l);
return 0;
}
四、文件包含
1、文件包含有两种格式:#include<文件名>和#include “文件名”
- <>专门用来包含系统提供的头文件(就是系统自带的,不是程序员自己写的)
- ""包含的头文件,编译器默认会先在当前目录下寻找相应的头文件,如果没找到然后再到系统指定目录去寻找,如果还没找到则提示文件不存在
2、文件包含的实例
1、首先新建一个test.h头文件
// 声明一个方法,相当于Java的接口定义
void onShow();
2、新建一个test.c文件,然后再实现test.h头文件里面定义的方法
#include "test.h" // 查找当前我们能看到的文件
#include <stdio.h> 插件C配置环境
void onShow(){
printf("onShow method run。。\n");
}
3、新建一个main.c文件,在该文件中调用onShow()方法
#include <stdio.h>
#include "test.h"
int main(void)
{
onShow();
return 0;
}
执行编译命令:gcc main.c -o main(报如下错误)
解决办法:gcc -c test.c、gcc –c main.c、gcc -o main main.o test.o