「C++系列」预处理器

news/2024/10/4 7:46:31/

【人工智能教程】,前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。

点击跳转到网站:【人工智能教程】

文章目录

  • 一、预处理器
    • 1. 宏定义(Macro Definition)
    • 2. 文件包含(File Inclusion)
    • 3. 条件编译(Conditional Compilation)
    • 4. 宏取消定义(Undefining Macros)
    • 5. 行控制(Line Control)
    • 6. 错误和警告(Error and Warning)
    • 7. 预定义的宏
  • 二、相关链接

一、预处理器

C++预处理器(Preprocessor)是C++编译器的一个组成部分,它在编译之前对源代码进行处理。预处理器指令是以#字符开始的特殊指令,它们告诉预处理器在编译之前对源代码进行某些操作,比如宏定义、条件编译、文件包含等。预处理器不是C++语言的一部分,但它对于C++编程至关重要,因为它允许程序员以更灵活和高效的方式编写代码。

以下是预处理器的一些主要功能和指令:

1. 宏定义(Macro Definition)

  • #define:用于定义宏。宏可以是无参数的(像常量),也可以带参数(像函数)。
#define PI 3.14159
#define SQUARE(x) ((x) * (x))

2. 文件包含(File Inclusion)

  • #include:用于包含(或插入)另一个文件的内容到当前文件中。这通常用于包含头文件(.h 或 .hpp 文件),这些文件包含了函数声明、宏定义、类型定义等。
#include <iostream>
#include "myheader.h"

3. 条件编译(Conditional Compilation)

  • #ifdef#ifndef#endif#elif#if#undef:这些指令用于基于某些条件包含或排除代码段。
#ifdef DEBUGstd::cout << "Debug mode is on." << std::endl;
#endif#ifndef SOME_MACRO#define SOME_MACRO// 定义一些内容
#endif

4. 宏取消定义(Undefining Macros)

  • #undef:用于取消之前使用#define定义的宏。
#define MAX_VALUE 100
// ...
#undef MAX_VALUE

5. 行控制(Line Control)

  • #line:用于改变预处理器报告的行号和文件名。这通常用于大型项目中的错误处理,或者在生成源代码的工具中。
#line 100 "newfile.cpp"

6. 错误和警告(Error and Warning)

  • #error#warning:用于生成编译时的错误和警告消息。
#ifndef SOME_ESSENTIAL_FEATURE
#error "This feature is required but not defined!"
#endif#warning "This code is deprecated and will be removed in a future version."

7. 预定义的宏

C++预处理器定义了一些预定义的宏,比如__LINE____FILE____DATE____TIME__等,这些宏在编译时会被替换为相应的值。

#include <iostream>int main() {std::cout << "File: " << __FILE__ << std::endl;std::cout << "Line: " << __LINE__ << std::endl;std::cout << "Date: " << __DATE__ << std::endl;std::cout << "Time: " << __TIME__ << std::endl;return 0;
}

在这里插入图片描述

二、相关链接

  1. Visual Studio Code下载地址
  2. Sublime Text下载地址
  3. 「C++系列」C++简介、应用领域
  4. 「C++系列」C++ 基本语法
  5. 「C++系列」C++ 数据类型
  6. 「C++系列」C++ 变量类型
  7. 「C++系列」C++ 变量作用域
  8. 「C++系列」C++ 常量知识点-细致讲解
  9. 「C++系列」C++ 修饰符类型
  10. 「C++系列」一篇文章说透【存储类】
  11. 「C++系列」一篇文章讲透【运算符】
  12. 「C++系列」循环
  13. 「C++系列」判断
  14. 「C++系列」函数/内置函数
  15. 「C++系列」数字/随机数
  16. 「C++系列」数组
  17. 「C++系列」字符串
  18. 「C++系列」指针
  19. 「C++系列」引用
  20. 「C++系列」日期/时间
  21. 「C++系列」输入/输出
  22. 「C++系列」数据结构
  23. 「C++系列」vector 容器
  24. 「C++系列」类/对象
  25. 「C++系列」继承
  26. 「C++系列」重载运算符/重载函数
  27. 「C++系列」多态
  28. 「C++系列」数据抽象
  29. 「C++系列」数据封装
  30. 「C++系列」 接口(抽象类)
  31. 「C++系列」文件和流
  32. 「C++系列」异常处理
  33. 「C++系列」动态内存
  34. 「C++系列」命名空间
  35. 「C++系列」模板

http://www.ppmy.cn/news/1533785.html

相关文章

Python FastApi 实现签名验证

大家在写后台接口时&#xff0c;都想要设计一个安全的&#xff0c;稳定的架构来支持各种业务&#xff0c;此文章介绍的Token的机制&#xff0c;和签名的验证。Token作为鉴权&#xff0c;签名作防篡改 目录 1.Token 2.签名 3.接口中的实现 1.Token 此处介绍的实现方式较简单…

docker pull 超时Timeout失败的解决办法

当国内开发者docker pull遇到如下提示时&#xff0c;不要惊讶 [rootvm /]# docker pull postgres Using default tag: latest Error response from daemon: Get "https://registry-1.docker.io/v2/": dial tcp 128.121.146.235:443: i/o timeout [rootvm /]# 自2024…

关于对比学习(简单整理

什么是对比学习&#xff1f; ​ 对比学习是一种学习方法&#xff0c;侧重于通过对比正反两方面的实例来提取有意义的表征。它利用的假设是&#xff0c;在学习到的嵌入空间中&#xff0c;相似的实例应靠得更近&#xff0c;而不相似的实例应离得更远。通过将学习作为一项辨别任务…

在Git中操作失误,如何撤回

在 Git 中&#xff0c;撤回操作可以通过多种方式实现&#xff0c;具体取决于你想要撤回的操作类型&#xff08;如提交、暂存、修改等&#xff09;。以下是几种常见场景及其相应的撤回方法&#xff1a; 1. 撤回未暂存的修改 如果你在工作区中进行了更改&#xff0c;但还没有将…

适配器模式【对象适配器模式和类适配器模式,以及具体使用场景】

2.1-适配器模式 ​ 类的适配器模式是把适配者类的API转换成为目标类的API&#xff0c;适配器模式使得原来由于接口不兼容而不能一起工作的那些类可以一起工作&#xff0c;其实在具体的开发中&#xff0c;对于自己系统一开始的设计不会优先考虑适配器模式&#xff0c;通常会将接…

滚雪球学MySQL[8.3讲]:数据库中的JSON与全文检索详解:从数据存储到全文索引的高效使用

全文目录&#xff1a; 前言8.3 JSON与全文检索1. JSON数据类型的使用1.1 JSON 数据类型概述1.2 JSON 数据的插入与查询1.3 JSON 常用函数与操作1.4 JSON使用的优缺点与性能考虑 2. 全文索引与全文检索2.1 全文索引概述2.2 全文检索的使用2.3 全文检索模式2.4 全文索引优化与性能…

Electron 安装以及搭建一个工程

安装Node.js 在使用Electron进行开发之前&#xff0c;需要安装 Node.js。 官方建议使用最新的LTS版本。 检查 Node.js 是否正确安装&#xff1a; # 查看node版本 node -v # 查看npm版本 npm -v注意 开发者需要在开发环境安装 Node.js 才能编写 Electron 项目&#xff0c;但是…

QT系统学习篇(3)- Qt开发常用算法及控件原理

一、Qt中 Qt框架中和模块提供一些算法和常用函数 比如 double d1-59.6,d292.5;double d3qAbs(d1);double d4qMax(d1,d2);qDebug()<<"d3"<<d3<<"d4"<<d4<<endl;二、Qt窗口及控件原理设计 理解Qt窗口的生成、属性 1、Qt窗口…