C/C++包含头文件的两种方式:尖括号方式 (<>)和双引号方式 (““)的区别
在 C 语言中,头文件的包含方式分为两种:
-  尖括号方式 ( <>):#include <header.h>特点: - 用于包含系统提供的头文件(标准库或第三方库)。
- 编译器会在指定的系统路径中查找头文件(如标准库路径或其他预定义路径)。
- 通常用于标准库头文件,例如 <stdio.h>、<stdlib.h>等。
 查找顺序: - 先在系统路径中查找。
- 如果找不到,则报错。
 
注意:如果是有Makefile文件,那么是可以把自己写的头文件的路径包含到上面提到的“预定义路径”中,从而实现用尖括号也能找到相应的头文件。比如下面的Makefile代码:
CFLAGS := -Wall -O2 -g
CFLAGS += -I $(shell pwd)/include
- CFLAGS定义了编译选项,包括:- -Wall:启用所有常见的编译警告。
- -O2:启用中等优化。
- -g:生成调试信息。
- -I $(shell pwd)/include:将当前目录下的- include目录添加到头文件搜索路径中。
 
-  双引号方式 ( ""):#include "header.h"特点: - 通常用于包含用户定义的头文件。
- 编译器会先在当前文件所在目录查找头文件。
- 如果当前目录找不到,再转而到系统路径中查找。
 查找顺序: - 先在当前文件所在目录查找。
- 如果找不到,再在系统路径中查找。
 
主要区别
-  查找路径: - #include <header.h>:直接查找系统路径,不会优先查找当前目录。
- #include "header.h":优先查找当前目录,然后再查找系统路径。
 
-  使用场景: - <header.h>用于标准库或明确位于系统路径中的头文件。
- "header.h"用于项目中的自定义头文件。
 
实际应用中的建议
-  标准库头文件:始终使用 <>,例如:#include <stdio.h>
-  项目中的头文件:使用 "",例如:#include "myheader.h"
-  避免歧义:如果系统路径中存在与自定义头文件重名的头文件,使用 <>和""的查找顺序会影响结果,应尽量避免这种冲突。
