C++学习,预处理器

ops/2024/9/25 13:34:49/

C++ 预处理器(Preprocessor)是 C++ 编译器的一个组成部分,它在编译过程的最开始阶段执行。预处理器是一些指令,指示编译器在实际编译之前所需完成的预处理。预处理器指令以井号(#)开头,只有空格字符可以出现在预处理指令之前。

#define 预处理,指令形式:
#define macro-name replacement-text

 

C++ 预处理器主要功能和指令: 


  1. 使用 #define 指令可以定义宏。宏可以是常量值(如 #define PI 3.14159),也可以是代码片段(如 #define SQUARE(x) ((x) * (x)))。预处理器会在编译之前将代码中的宏替换为它们定义的内容。

  2. 条件编译 (#if#ifdef#ifndef#else#elif#endif):
    这些指令允许你根据编译时的条件来包含或排除代码块。例如,你可以根据编译时定义的宏来包含或排除调试信息。

  3. 文件包含 (#include):
    #include 指令告诉预处理器在当前位置插入一个文件的内容。这对于共享代码非常有用,比如头文件(.h 或 .hpp)中定义的函数声明、类声明、宏定义等。

  4. 宏取消定义 (#undef):
    #undef 指令用于取消之前定义的宏。

  5. 行号 (#line):
    #line 指令允许你修改编译器报告的当前行号和文件名。这在处理生成的代码时非常有用,因为它可以让错误和警告消息指向源代码中更准确的位置。

  6. 预定义的宏:
    C++ 预处理器定义了一些预定义的宏,如 __LINE__(当前行号)、__FILE__(当前文件名)、__DATE__(编译日期)、__TIME__(编译时间)和 __STDC__(如果编译器遵循标准 C,则为 1)。

  7. 宏参数:
    宏可以带有参数,这允许你创建更通用的宏定义。参数在宏定义中使用圆括号包围,在宏体中通过 # 和 ## 操作符可以进行字符串化和标记粘贴操作。

  8. 错误和警告 (#error 和 #warning):
    #error 指令会导致编译器生成一个错误消息,并停止编译。#warning 指令会导致编译器生成一个警告消息,但编译会继续进行。

预处理器的工作方式使得 C++ 程序更加灵活和强大,也带来了一些需要注意的问题,比如宏展开可能导致的代码膨胀和难以调试的副作用。

 


http://www.ppmy.cn/ops/115802.html

相关文章

练习题 - Django 4.x Overviewses 框架概述

Django 是一个开放源代码的 web 应用框架,使用 Python 语言编写,旨在帮助开发人员更快地构建和开发 web 应用。Django 以其“快速开发”和“干净、实用”的设计原则著称,使得开发人员可以专注于编写自己的应用和业务逻辑,而不是重…

详解机器学习经典模型(原理及应用)——岭回归

一、什么是岭回归 岭回归(Ridge Regression),也称为Tikhonov正则化(Tikhonov Regularization),是一种专门用于处理多重共线性(特征之间高度相关)问题的线性回归改进算法,…

求10 个整数中最大值

我们需要10个整数之中求出10个整数之中的最大值所以我们先要将10个整数先放置到一个容器之中,我们初期就使用数组的形式存放10个数组即设置数组arr[10],我们要将10个数组之中的数字输出出来,我们这里使用的是遍历循环输出数组。我们这里是使用…

初试Bootstrap框架

文章目录 一、Bootstrap概述二、Bootstrap实例1、创建网页2、编写代码3、代码说明4、浏览网页,查看结果5、登录按钮事件处理6、浏览网页,查看结果 三、实战小结 一、Bootstrap概述 大家好,今天我们将一起学习一个非常流行的前端框架——Boot…

力扣2563.统计公平数对的数目

文章目录 题目介绍解法 题目介绍 解法 红蓝染色体法 class Solution {public long countFairPairs(int[] nums, int lower, int upper) {long res 0;Arrays.sort(nums);for(int i 0; i < nums.length -1; i){int left lowerBound(nums,lower - nums[i],i 1); // > …

Hive 的窗口函数 详解

要从底层原理和源代码层面详细解释 Hive 中的 ROW_NUMBER() 函数的实现&#xff0c;我们需要了解 Hive 的执行框架、查询计划的生成以及 Hive 如何通过 MapReduce 或 spark 来执行窗口函数。以下是关于 ROW_NUMBER() 的详细解释&#xff0c;包括底层实现和关键代码的分析。 1.…

Sqlmap中文使用手册 - File system access模块参数使用

目录 1. File system access模块的帮助文档2. 各个参数的介绍2.1 --file-readFILE2.2 --file-writeFILE2.3 --file-destFILE 1. File system access模块的帮助文档 File system access:These options can be used to access the back-end database managementsystem underlying…

旷世科技ShuffleNetV2代码分析

旷视科技官方开源了ShuffleNet系列模型的代码&#xff0c;代码链接&#xff1a;https://github.com/megvii-model/ShuffleNet-Series 进入链接之后&#xff0c;我们看到有如下图ShuffleNetV1、ShuffleNetV2以及ShuffleNetV2、ShuffleNetV2.Large等。 ShuffleNetV2相比于Shuffle…