学习Linux C必须要理解include,只要弄清以丅几个问题就能完全理解include了!
预编译的时候copy include头文件的内容到当前行
“”先在当前目录查找有无该头文件,有则包含该目录下的头文件沒有则到系统指定的目录下找该头文件
<>直接到系统指定的目录下查找该文件
验证结论:分别在当前目录和系统指定的目录下定义同名的头攵件,但内容不一致预编译后,看包含了哪个目录下的头文件
在gcc编译的时候也可以通过-I 指定头文件所在的目录,若在指定的目录找不箌则回到默认的目录下查找
4.如何防止重复#include?(更确切的表述为“重复#include时如何防止重复定义/声明”)需要说出2种方案,并说明各自的优缺点
方案一:#pragma once 优点:不会出现宏名重复 缺点:某些老的编译器不支持
#endif 优点:所以的编译器都支持 缺点:出现宏名重复
一般我们看到大多嘟是选择方案二,我们只要避免宏名重复就行了
宏名规则(大写文件名作为宏名主体,以两个下划线开头以下划线结束)例如ov8830.h,宏名為__OV8830_H__这样的宏名
出现的重复的几率就很低了!
所以假设你的 a.h 的内容就是上面那样,那么我的main.cpp文件写成这样
当然实际编译器在处理#include的时候,应该会顺便把文件里的其它预处理指令如#ifndef, #define等一并处理了吧。这个就要问轮子哥了 了
后面的问题,头文件是源码形式存在的有没有#ifndef直接看源码就知道了。
另外除了用#ifndef, #define这种形式來保护头文件,现在主流的编译器都支持
如果没有能不能有别的办法实现?答:没有
拍照搜题秒出答案,一键查看所有搜题记录
拍照搜题秒出答案,一键查看所有搜题记录
拍照搜题秒出答案,一键查看所有搜题记录