初识Cpp之 三、Cpp预处理器

三、C++预处理器

​ C++和C语言一样,也使用一个预处理器,在程序进行主编译之前对源文件进行处理,有些C++实现使用翻译器程序将C++程序转化为C语言程序,虽然翻译器也是一种预处理器,但是这里不讨论这种预处理器。而是只讨论以#打头的预处理指令。

(1)头文件名

​ C++中预处理指令#include所包含的文件名,被称为头文件(header file),C++编译器自带了很多头文件,每个头文件都支持一些特定的工具。C语言的传统是头文件使用拓展名.h,但是C++的用法变了,C++对老式的C语言头文件保留了拓展名.h(C++程序仍然可以使用这种头文件),而C++头文件则没有拓展名。有些C语言头文件被转化成C++头文件,这些头文件被重新命名,去掉了拓展名.h(使之称为C++的风格的名称),并在文件名前面加上前缀c(表明来自C语言),例如,C++版本的math.hcmath

(2)名称空间

​ 名称空间支持是一项C++特性,旨在编写大型程序以及将多个厂商的现有代码组合起来的程序时更加容易,有助于组织程序。按照这种方式,类、函数和变量都是C++编译器的标准组件,它们现在都被放置在名称空间std中。仅当头文件没有扩展名h时,情况才是这样的。这意味着在iostream中定义的用于输出的cout变量实际上是std::cout,而endl变量实际上是std::endl。为了简化这种操作,可以使用using编译指令使得std名称空间中的所有名称都可用,而不必再添加std::前缀。例如:

#include <iostream>			//未使用using编译指令
std::cout << "Hello World!";
std::cout << std::endl;
#include <iostream>		//使用using编译指令
using namespace std;
cout << "Hello World!";
cout << endl;
using namespace std;

这条using编译指令使得std名称空间中的所有名称都可用。这其实是一种偷懒的做法,在大型项目中有一个潜在的问题。更好的方法是,只使所需的名称可用,这可用通过使用using声明来实现:

using std:: cout;			//make cout avaliable
using std:: endl;			//make endl avaliable

用这些编译指令后,便可用使用cout、endl,而不必加上std::前缀。

​ 当前通行的理念是,只让需要访问名称空间std的函数访问它是最好的选择,下面是不同的访问std名称空间的方法:

1、将using namespace std;放在函数定义之前,让文件中所有的函数都能够使用名称空间std中所有元素。

2、将using namespace std;放在特定的函数定义中,让该函数能够使用名称空间std中的所有元素。

3、在特定的函数中使用类似using std::cout;这样的指令,而不是使用using namespace std;让该函数能够使用特定的元素,如cout

4、完全不使用编译指令using,而在需要使用名称空间std中的元素时,使用前缀std::

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

木心

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值