C++编程思想--命名空间、头文件、库

头文件 库 命名空间

头文件:是一个含有某个库的外部声明函数和变量的文件。大部分的库包含众多的函数和变量,为了减少工作量,当对这些函数和变量做外部声明是,使用头文件。

1)在头文件中进行声明:向编译器介绍名字--标识符。定义:定义要为名字分配存储空间,无论是定义函数还是变量,编译器为变量在内存中开辟空间来保存变量的数据,函数,编译器会生成代码。这些代码最终也要占用一定内存

2)头文件是存放接口的地方。用C++建造大项目时采用库,收集相关函数到同一个对象模块或库中。并使用同一个头文件存放所有这些函数的声明。在C中可以使用可变的参数表,也就是让编译器忽略对参数的检查。一旦编译器只看到文件中用户自己定义的函数,可能就会连接这个函数。若将所有的函数声明放在一个头文件中,并且将这个头文件包含在使用这些函数和定义这些函数的任何文件中,可以保证库中的一致性,并通过在各处强制使用相同的接口,可以减少程序的错误。

3)头文件中应该只限于存放对编译器的信息。不涉及通过生成代码或创建变量而分配存储的任何信息。因为头文件一般会包含在项目的几个翻译单元中,若一个标识符在多于一处被分配存储,那么连接器就报告多次定义错误,为什么会报定义错误?C++中规定声明可以多次,但是定义只有一次。在C中,每个独立的C文件就是一个翻译单元。在C++中是允许进行重载的,允许重声明函数,但是不允许重声明结构,为放置头文件包含引起的错误,需要在头文件中进行预处理。

4)有两种方式来指定文件。以< >表示的是以特定的方式寻找文件。一般是环境中或编译器命令行中指定的某种寻找路径。以” ”那么与处理器会在当前目录开始寻找。

现在的头文件的包含命令已经标准化,过去典型的包含头文件的方式是带上.h,因为那时名字空间不是语言的一部分。使用标准的包含格式,就必须显示的使用using指令。现在使用一个关键字:using。这就意味着打开某个名字空间。

预处理器:在真正的编译开始之前由编译器调用的独立程序。可以删除注释,包含其他文件以及执行宏替代。可以使用预处理器告诉某个标志已经被定义,不需要再次的定义。杜宇包含结构的每个头文件,应当首先检查这个头文件是否已经包含在特定的cpp文件中。通过测试预处理器的标志来检查。若这个标志已经设置,则表明这个类型已经声明,应当忽略这段声明它的代码。

#ifndef  HEADER_FLAG

#define  HEADER_FLAG

   //Type declaration 

#endif  //HEAD_FLAG

名字空间:预防使用相同的函数名和标识符而导致的冲突。但是或许我们只是用头文件就可以了,实则不然,若只是简单的包含头文件,使用头文件中的一些函数或对象,编译器就无法找到任何有关函数和对象的声明。因为所有的声明都在一个名字空间中,而没有告诉编译其我们想要使用这个名字空间中的声明。

1)说编译器在每个翻译单元上单独运行,目标文件与启动代码一起由链接器链接为可执行程序。当文件中使用了在外部定义的函数时,就要进行外部引用,找到它们的实际地址。在可执行程序中用这些地址将外部引用替换。

2)在编译器中呢,仅仅是通过查找目标文件表,按照在连接表中给出的次序,取到第一个找到的函数名。这个就是没有名字空间所带来的麻烦。

上面一直提到库,现在来介绍库。

库管理器:编程包中带有的一个管理对象模块组。若想创建 一个库文件,就必须建立一个头文件,包含库中所有的函数远行,然后将所有的对象模块以及建成后的库名传递给库管理器。库:是子程序的集合,它不是独立的程序,是向其它程序提供服务的代码。只是他人写好的一些代码,按照某种方式包装在一起。通常最小 的包是带有扩展名的文件和向编译器声明库中有什么的一个或多个头文件。连接器知道在库文件中搜索和提取相应的已编译的代码。使用他人的库是提高效率的最重要的方法。
库连接是将一个或多个库包括到程序中,有两种连接方式,包括静态连接和动态连接。在静态连接中,将一个或者多个库或者可执行文件链接到一块生成可执行程序。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值