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"
-
避免歧义:如果系统路径中存在与自定义头文件重名的头文件,使用
<>
和""
的查找顺序会影响结果,应尽量避免这种冲突。