C编程笔录(一)1.1:使用#include包含头文件,用尖括号和双引号括起有什么区别?

问题:使用#include包含头文件,用尖括号<>和双引号""括起有什么区别?

测试:

项目环境:Microsoft Visual Studio Professional 2017

创建个“空项目”,通过项目“配置属性”弹窗->链接器->系统->子系统->选择"控制台(/SUBSYSTEM:CONSOLE)"设置为控制台应用程序,项目创建完成后添加一个含有main入口函数的.c文件到自己指定的工作目录,这个“含有main入口函数的.c文件所在的目录”将成为#include使用双引号""包含相对路径下头文件的检索方式之一,即“当前项目用户目录”。

如果用户创建其他头文件没有添加在以“当前项目用户目录”为相对根目录的目录下,并且也没有添加到项目“配置属性”->VC++项目->“包含目录”项内指定的目录集合的某一目录的相对路径的目录下,那么引入该头文件的唯一途径便只有编写文件的完整路径。

用尖括号<>包含头文件匹配文件的机制:

预处理器首先检索<>内路径是否可以直接匹配到计算机存储器内的目标头文件,如果匹配不成功,则紧接着遍历项目的“配置属性”->VC++项目->“包含目录”项内指定的目录集合,匹配成功则编译器不会报错,否则提示“无法打开源文件xxx”。

用双引号""包含头文件匹配文件的机制:

预处理器首先检索“”内路径是否可以直接匹配到计算机存储器内的目标头文件,如果匹配不成功,则紧接着匹配“当前项目用户目录”,依然没有结果则最后遍历项目的“配置属性”->VC++项目->“包含目录”项内指定的目录集合,成功则编译器不会报错,否则提示“无法打开源文件xxx”。

由此可以得出结论:

使用#include包含头文件,用尖括号<>和双引号""括起的区别主要在于检索相对路径下的头文件,尖括号不检索“当前项目用户目录”,双引号反之,并且尖括号的检索规则双引号都具备,这样或许有人会存有疑问:既然都具备那为何还要用尖括号包含头文件?直接都写成双引号不就可以了?

这是涉及到检索查询效率问题了,C编程习惯性的将系统头文件引入方式使用尖括号,用户自定义头文件用双引号,从上面的尖括号和双引号包含头文件匹配文件的机制可以看出,如果系统头文件引入用双引号则比尖括号多一次“当前项目用户目录”的检索匹配。

你可能感兴趣的:(C)