C语言中#include 引号“ ”与尖括号< >的区别
1、预处理器与预处理指令
1.1 、预处理器
预处理器是一个小软件,它可以在编译前处理C程序,预处理器的主要作用包括宏定义,条件编译,文件包含等。
预处理器的输入是一个C程序,程序包含预处理指令,预处理器会执行这些指令,并在处理过程中删除这些指令。
预处理器的输出是另一个C程序,它是原程序编辑后的版本,不再包含指令。之后被直接交给编译器,编译器检查程序是否有错误,并将程序翻译为目标代码(机器指令)。
预处理器的行为由预处理指令控制,预处理指令是由#字符开头的一些命令。
#include指令,文件包含,它告诉预处理器打开一个特定的文件,将它的内容作为正在编译的文件的一部分包含进来。
例如:
#include <stdio.h> //预处理器打开stdio.h文件,并将它的内容加到当前的程序中。
1.2、预处理指令
预处理指令以#符号开头,主要有以下三种:
1、宏定义:#define指令定义一个宏,#undef指令删除一个宏定义。
2、文件包含:#include指令,将一个指定文件的内容包含到程序中。
3、文件编译:#if,#ifdef,#ifndef,#elif,#else,#endif。
2、#include指令
#include指令主要有2种写法:
1、#include <文件名>,用于C语言库的头文件。
2、#include “文件名”,用于所有的文件,包括C语言库的头文件、自己编写的头文件。
这两种写法的主要区别在于编译器定位头文件的方式,大多数编译器遵循的规则为:
#include <文件名>:搜寻系统头文件所在的目录。
#include “文件名”:先搜寻当前目录,如果搜寻不到头文件,再去搜寻系统头文件所在目录。
3、#include 记号(上面2中写法的变种)
记号是任意预处理记号序列。预处理器会扫描这些记号,并替换遇到的宏。
例如:
#define STM32F103 “stm32f103.h”
#include STM32F103
3、总结
1、#include <文件名>,主要用于包含系统头文件。
2、#include “文件名”,可用于所有文件,既可用于系统头文件,也可应用于自己编写的头文件。
3、如果#include <自己编写得文件>,预处理器可能无法找到包含文件。
4、所以直接用 #include “文件名” 一定不会出错。