使用头文件(相对路径)、命名头文件、命名空间

1、使用头文件

在创建了头文件之后,只要把他的文件名用双引号括起来,如下所示的命令就可以导入它:
#include"fishc.h"
如果没有给出路径名,编译器会到当前子目录以及当前开发环境中的其他逻辑子目录里去寻找头文件。
为了消除这种猜测,在导入自己的头文件时可以使用相对路径。分以下几种情况:
1、如果头文件与程序文件在同一个子目录里,则可以这么写:
linux系统:#include"./fishc.h" 熟悉linux的都知道,./表示当前目录
windows系统:#include".\fishc.h"
就是头文件与程序文件在一个文件夹里
2、如果 头文件在上级子目录,则可以这么写:
linux: #include"…/fishc.h"
windows #include"…\fishc.h"
…/表示上级目录

3、如果头文件位于某个下级子目录里,那么以下级子目录的名字开头
linux:#include"somefile/fishc.h"
windows:#include"somefile\fishc,h"
就是头文件被放在一个文件夹a,而这个文件夹a与程序文件在一个大的文件夹b里面
4、如果头文件位于某个与当前子目录平行的“兄弟”子目录里,则需要这么写:
linux: #include"…/somefile/fishc.h"
windows: #include"…\somefile\fishc.h"
就是头文件在上一级文件夹a里,程序文件在文件夹b,他俩共同存放于文件夹c中。

2、命名头文件会遇到的事情

头文件的命名规则:
在刚开始的时候要写上前两个宏
#ifndef ADD_H
#define ADD_H
//执行定义
#endif

为什么这样呢,这里 如果没有定义ADD_H这个头文件,那么条件为真,则定义一次,然后执行下面的语句。直到endif。
如果定义了ADD_H这个头文件,条件为假,这样直到endif的所有语句都不会被执行。
这样做的好处是防止头文件被多次执行,避免出错,这样一来,即使包含着这段代码的文件在某个项目里被导入了100次,头文件执行的代码也只会被声明一次。

3、命名空间

1、随着程序变得越来越复杂,全局作用域存放的东西越来越多,尤其是在使用外部函数库时
这样就会出现一个问题:因为没有两样东西可以拥有同样的名字
解决方案是给每一个变量、函数和类等取一个独一无二的名字,但这可能会很困难或很麻烦。
所以命名空间(namespace)的用武之地来了
命名空间其实就是由用户定义的范围,同一个命名空间的东西只要在这个命名空间有独一无二的名字就行了!!
2、创建命名空间
很简单:先写出关键字namespace,再写出这个命名空间的名字,然后把这个命名空间里的东西全部括在一对花括号里面就行了,如下所示:
namespace myNamespace
{
//all your want
}
注意最末尾不要加分号,因为这不是结构。
3、命名空间的使用
如果某个东西是定义在命名空间里面的,程序不能立刻使用它。
这正是命名空间的意义所在:把东西放进自己的小盒子里面,不让他与可能有着相同名字的其他东西发生冲突
想要访问命名空间里面定义的东西有三种方法可供选择

1
std::cout<<“sb”";
2
using namespcae std;
把命名空间一开始就这么用,把东西带到全局作用域
执行完这条语句,命名空间里的所有东西都倒了出来,所有函数都可以使用
3
最后一个就是用using指令只把你需要的特定命名从命名空间提取到某个函数或者全局作用域。
using std::cout;
cout<<“sb”;
注意: using指令出现的位置决定着从命名空间里面提取出来的东西在哪个作用域内使用。
如果你把它放到所有函数声明的前面,它将拥有全局性,如果你把它放到某个函数里面,那么它将只能在这个函数内部使用。

你可能感兴趣的:(C++,头文件,命名规则,命名空间,防止重复包含)