• 初识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 			//未使用using编译指令
    std::cout << "Hello World!";
    std::cout << std::endl;
    
    • 1
    • 2
    • 3
    #include 		//使用using编译指令
    using namespace std;
    cout << "Hello World!";
    cout << endl;
    
    • 1
    • 2
    • 3
    • 4
    using namespace std;
    
    • 1

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

    using std:: cout;			//make cout avaliable
    using std:: endl;			//make endl avaliable
    
    • 1
    • 2

    用这些编译指令后,便可用使用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::

  • 相关阅读:
    全志H616语言控制刷抖音小项目(守护进程、udev机制)
    Redis - 保证数据库与缓存数据一致性 - 如何保证两步都执行成功?
    SpringBoot自动装配原理
    1.3 do...while实现1+...100 for实现1+...100
    SpringCloudAlibaba Ribbon Nacos 负载均衡的操作案例
    比较两个数组内容是否相同
    OpenJDK提案将提供Java类文件API
    Object Detection in Optical Remote Sensing Images: A Survey and A New Benchmark
    京东云开发者|探寻软件架构的本质,到底什么是架构?
    PCL - 3D点云配准(registration)介绍
  • 原文地址:https://blog.csdn.net/qq_44940689/article/details/126679954