• 初识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::

  • 相关阅读:
    Unity3D 基础——使用 Vector3.Distance 计算两个物体之间的距离
    Matlab论文插图绘制模板第41期—气泡图(bubblechart)
    ChatGPT Plus 支付出现「您的银行卡被拒绝/your card has been declined」怎么办?
    01 DevOps 之 Git 命令使用
    adhd数据集表型
    论坛介绍 | COSCon'23 开源文化(GL)
    Spring AI 初学
    TypeScript常用知识点及其最佳实践总结
    MyBatis-Plus多数据源——如何在一个项目中使用多个MySQL数据库
    C++ —— 内联函数
  • 原文地址:https://blog.csdn.net/qq_44940689/article/details/126679954