#include包含头文件之尖括号与双引号详解
来源:互联网 发布:王者荣耀优化 编辑:程序博客网 时间:2024/06/07 19:47
不废话,先上结论
#include "" : 首先在所有被编译的.c所在的路径中,查找头文件,如果找不到,则到 -I路径下去找头文件
#inclue <> :首先在-I路径下去找,如果找不到,那就找不到了,编译错误
目的:搞清楚#include <>与 #include “”包含头文件的顺序
输入:
目录结构:如图所示,我在dlmu.c的同级目录下增加了dlmu.h,log路径下增加了dlmu.h,build路径下增加了dlmu.h,不同的头文件中,对宏INCLUDE_TEST的定义不同,通过打印宏的值,来判断先包含哪些路径下的头文件
1、当用双引号时的代码:
#include <unistd.h>#include <syslog.h>#include <log.h>#include <execinfo.h>#include <stdio.h>#include "dlmu.h"#undef LOG_MODULE_NAME#define LOG_MODULE_NAME "DLMU"#define DELAY_TIME 600#ifndef INCLUDE_TEST#define INCLUDE_TEST "No include macro"#endifint main(int argc, char **argv){printf("%s\n", INCLUDE_TEST);return 0;}
用双引号时的打印结果:
[root@FriendlyARM caijinqiu]# ./dlmu
/home/caijinqiu/SVN/src/networking/common/dlmu.h
可以看出,用双引号的时候先搜索.c文件所在的路径
2、删除dlmu.c所在路径的头文件,查看结果
[root@FriendlyARM caijinqiu]# ./dlmu
/home/caijinqiu/SVN/src/networking/log/dlmu.h
可以看出,当前路径下没有头文件的时候,回去工程内其它路径下搜索
3、删除log路径下的的头文件,查看结果
/home/caijinqiu/SVN/src/networking/project/build/../release
rm -rf /home/caijinqiu/SVN/src/networking/project/build/../release/* -v
已删除"/home/caijinqiu/SVN/src/networking/project/build/../release/dlmu"
/usr/local/arm/4.3.2/bin/arm-none-linux-gnueabi-gcc -g -Wall -I/usr/local/arm/4.3.2/lib/gcc/arm-none-linux-gnueabi/4.3.2/include -I/usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/usr/include -I../../log ../../common/dlmu.c ../../log/log.c -o /home/caijinqiu/SVN/src/networking/project/build/../release/dlmu
../../common/dlmu.c:21:18: error: dlmu.h: No such file or directory
make: *** [/home/caijinqiu/SVN/src/networking/project/build/../release/dlmu] 错误 1
编译出错,猜测,用双引号#include的时候,只会在同一级路径,或者下一级路径下搜索,在remote_call路径下添加头文件,commn路径下新建文件夹,增加头文件,然后再进行测试
4、按照上面的假设,发现还是编译错误,查看原因,发现没有编译remote_call.c,所以猜测#include""会在所有被编译的.c所在的路径搜索头文件
/home/caijinqiu/SVN/src/networking/project/build/../release
rm -rf /home/caijinqiu/SVN/src/networking/project/build/../release/* -v
/usr/local/arm/4.3.2/bin/arm-none-linux-gnueabi-gcc -g -Wall -I/usr/local/arm/4.3.2/lib/gcc/arm-none-linux-gnueabi/4.3.2/include -I/usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/usr/include -I../../log ../../common/dlmu.c ../../log/log.c -o /home/caijinqiu/SVN/src/networking/project/build/../release/dlmu
../../common/dlmu.c:21:18: error: dlmu.h: No such file or directory
make: *** [/home/caijinqiu/SVN/src/networking/project/build/../release/dlmu] 错误 1
5、在编译脚本的-I路径下增加头文件,并且用#include "",看能否找到头文件
[root@FriendlyARM caijinqiu]# ./dlmu
/usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/usr/include/dlmu.h
发现可以找到头文件,证明,在本地找不到头文件,会到-I路径下去找头文件
6、在common文件夹下增加dlmu.h,并用#include ""
[root@FriendlyARM caijinqiu]# ./dlmu
/home/caijinqiu/SVN/src/networking/common/dlmu.h
发现,首先在本地找头文件
7、在上一次的情况下,用#include <>
[root@FriendlyARM caijinqiu]# ./dlmu
/usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/usr/include/dlmu.h
证明,先在 -I路径下查找
8、在上一次的情况下,删除系统路径下的头文件,看是否会去本地路径里找
/usr/local/arm/4.3.2/bin/arm-none-linux-gnueabi-gcc -g -Wall -I/usr/local/arm/4.3.2/lib/gcc/arm-none-linux-gnueabi/4.3.2/include -I/usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/usr/include -I../../log ../../common/dlmu.c ../../log/log.c -o /home/caijinqiu/SVN/src/networking/project/build/../release/dlmu
../../common/dlmu.c:21:18: error: dlmu.h: No such file or directory
make: *** [/home/caijinqiu/SVN/src/networking/project/build/../release/dlmu] 错误 1
发现不会到本地路径里去找
- #include包含头文件之尖括号与双引号详解
- 双引号与尖括号包含的头文件
- C++ 中include头文件尖括号<>与双引号""的区别
- 包含头文件时,尖括号与双引号的区别
- 包含头文件时,尖括号与双引号的区别
- include包含头文件的语句中,双引号和尖括号的区别是什么?
- include包含头文件的语句中,双引号和尖括号的区别
- include包含头文件的语句中,双引号和尖括号的区别
- C++基础之头文件引用的双引号与尖括号
- C++ 中include头文件时尖括号<>与双引号""的区别
- C++ 中include头文件时尖括号<>与双引号""的区别
- C++包含头文件时尖括号和双引号区别
- include的双引号与尖括号
- 头文件 #include 引号 尖括号
- #include中用双引号和用尖括号括起来头文件的区别
- 用include 引用头文件时,双引号和尖括号的区别
- 用include 引用头文件时,双引号和尖括号的区别
- c语言在包含头文件时用尖括号和双引号的区别
- 流媒体
- Codeforces 444B DZY Loves FFT(概率)
- win8.1开发之旅(三):XAML之Combobox数据绑定问题
- HTML 5 <script> defer 属性
- IOS-KVC/KVO
- #include包含头文件之尖括号与双引号详解
- 本地做个"注册会员"的网站(非网络
- Oracle event
- WM_COMMAND消息
- 关于PackageInfo、ApplicationInfo、ActivityInfo、ResolveInfo四种信息类的区别之我见
- UITextView in iOS7 doesn't scroll
- poj 4045 Power Station(初涉树形dp)
- qt调用java方法
- C++语言之vector函数