C++的预处理器

参考

参考

一、简介删除线格式

预处理器是一些指令,指示编译器在实际编译之前所需完成的预处理。
在将 C 和 C++ 文件传递到编译器之前,预处理器将对这些文件执行预先操作可以使用预处理器有条件地编译代码、插入文件、指定编译时错误消息以及将计算机特定规则应用于代码节
预处理器是将源文件的文本作为翻译的第一阶段操作的文本处理器。 预处理器不会分析源文本,但会将源文本细分为标记来查找宏调用。 尽管编译器一般会在其第一个传递中调用预处理器,但还是可以为了在不进行编译的情况下处理文本而单独调用预处理器

二、预处理器指令

预处理器指令(如 #define 和 #ifdef)通常用于简化源程序在不同的执行环境中的更改和编译。 源文件中的指令告知预处理器采取特定操作。 例如,预处理器可以替换文本中的标记,将其他文件的内容插入源文件,或通过移除几个部分的文本来取消一部分文件的编译。 在扩展宏之前,将识别并执行预处理器行。 因此,如果宏扩展到类似于预处理器命令的内容,该预处理器无法识别该内容。

预处理器语句使用的字符集与源文件语句的相同,只不过转义序列不受支持。 预处理器语句中使用的字符集与执行字符集相同。 预处理器还可识别负字符值

预处理器可识别下列指令:

  1. #define 指令
    #define 创建一个宏,该宏是标识符或参数化标识符与标记字符串的关联。 在定义宏之后,编译器可用标记字符串替换源文件中标识符的每个匹配项。

语法

#define 标识符标记-字符串opt
#define 标识符(标识符opt, ...,标识符opt)令牌字符串选择

实例

#define P 3.14
//定义了一个宏 P,其代表的常量值为 3.14,以后,我们需要使用 3.14 的地方,可以直接使用 P 来代替。

利用宏定义P,输入半径r,完成求圆面积的代码。    
#define P 3.1415926  
double r;
cin >> r;
cout << P *r * r << endl;   
  1. #error 指令
    #error 指令在编译时发出用户指定的错误消息,然后终止编译。
    语法
#error标记-字符串
#include <iostream>
using namespace std;
//如果没有预定义 MY_CODE_VERSION 宏,编译器会在编译时显示一个错误消息,并停止编译
#if !defined(MY_CODE_VERSION)
#error "MY_CODE_VERSION is not defined!"
#endif

int main() {
    
    cout << "条件编译测试" << endl
#error compile error here! 
    return 0;
}
  1. #if、#elif、#else 和 #endif 指令
    #if 指令与 #elif、#else 和 #endif 指令一起控制源文件部分的编译。 如果您编写的表达式(在 #if 后)有一个非零值,则在翻译单元中保留紧跟 #if 指令的行组
    语法
  • #if 后面可以接常量表达式,如果常量表达式的值为真(非0),则对一段程序进行编译,否则对另一段程序进行编译。因此可使程序在不同条件下,完成不同的功能
#

相关推荐

  1. C++处理器

    2024-06-12 01:12:03       9 阅读
  2. C++ 处理器

    2024-06-12 01:12:03       28 阅读
  3. C语言】处理器

    2024-06-12 01:12:03       13 阅读
  4. C 语言中 #define 处理器指令

    2024-06-12 01:12:03       20 阅读
  5. C# 处理器指令详解与示例

    2024-06-12 01:12:03       13 阅读
  6. SASS处理器用法

    2024-06-12 01:12:03       11 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-06-12 01:12:03       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-06-12 01:12:03       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-06-12 01:12:03       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-06-12 01:12:03       20 阅读

热门阅读

  1. 数据结构篇其六-串

    2024-06-12 01:12:03       10 阅读
  2. Web前端评价:深入剖析与全面审视

    2024-06-12 01:12:03       6 阅读
  3. 云计算——武汉理工期末复习

    2024-06-12 01:12:03       8 阅读
  4. python将一个图片雕刻镂空成二维码

    2024-06-12 01:12:03       10 阅读
  5. Redis缓存技术详解与实战

    2024-06-12 01:12:03       8 阅读
  6. Git如何拉取远程仓库的其他分支

    2024-06-12 01:12:03       7 阅读
  7. Spring Cloud应用框架

    2024-06-12 01:12:03       7 阅读
  8. 【python】基于pandas的EXCEL合并方法

    2024-06-12 01:12:03       11 阅读