keil中#include后的尖括号与引号的区别
九层妖塔 起于垒土
keil中#include后的尖括号与引号的区别
一、经典解释
先引入关于#include后的尖括号与引号的区别的经典解释:
双引号
系统先在源程序所在的目录内查找指定的包含文件( 在当前目录中查找),如果找不到,再按照系统指定的标准方式到有关目录中去寻找。
尖括号
系统将直接按照系统指定的标准方式到有关目录中去寻找(在标准系统目录中查找文件)。
区分两个概念:当前目录和标准系统目录。
据《C Primer Plus》说 对于标准系统目录一般IDE(集成开发环境)可以通过菜单选项进行设置,来指定用尖括号时的查找路径。 对于
当前目录,不同的IDE 也有着不同的解释。
二、在Keil中
1、Keil的标准系统目录
Keil中路径包含的设置:在(Project
->)Options for Target''
->C51
可用于设置当前项目的C51编译器控制命令。在Include Paths
一栏**用于设定包含文件的目录路径。
Keil在这里的Include Paths
包含文件的目录路径即是上文所说的标准系统目录。
2、Keil的当前目录
对于Keil单片机工程来说当前目录是指,Project文件夹的根目录。
3、Keil的工程结构分析
下图是Keil C51单片机工程比较常见的工程形式,即只有一个C文件,没有其他用户自己写的头文件和C文件。
具体的结构分析ing
图1.单C文件工程
三、测试
用已经已经建好的工程,使用SEG.h
头文件和C文件进行测试。(只需关注SEG.h
头文件和C文件的变化即可)。
主C文件:SEG.h
C文件SEG.h
头文件
test_1:
按照烂大街的说法:双引号用来包含自己写的文件。SEG.h
的头文件是自己写的应该用双引号括起来。但是此时SEG.h
的头文件是单独放在一个另一个文件夹里的。并不在下图中。
(因为测试工程采用的是模块化编程,将每个模块分别用一个C文件和头文件来写,主C文件也单独放在了一个文件夹中)
图2.Project的文件夹
此时,报错显示无法打开SEG.h
头文件
test_2:
将SEG.h
头文件剪贴到Project的文件夹中,如下图所示,
编译结果无错误无警告,下载后运行正常。
由test_1:和test_2:对比可知,keil工程的当前目录指的是Project文件夹的根目录
实测,在不添加Include Paths
路径时,将双引号换为尖括号也没问题。????
test_3:
在模块化编程中,为了便于管理各种文件,习惯性地按照硬件外设分为不同地文件夹。比如把数码管的相关程(SEG.c
和SEG.h
)单独放在一个名字为的SEG的文件夹里。此时keil不会自动找到SEG.h
这个头文件了。需要手动通过Include Paths
进行路径添加。