C++中的异类:“#” 符号背后的故事

最近在写编程语言的书,聊到C++的宏,感觉很有意思,搬运过来。

在C++语言中,# 符号是一个独特的符号。它似乎不在语言核心中,但是在源码里却又无处不在。在语法上,#的语法规则在C++体系里独具一格,和C++语法相比像是两个语言似的。这些差别让我们感受到#背后的故事不简单。

今天,我们一起探讨 # 在C++语言中的所有作用和功能,并思考其设计的优缺点,以及背后的历史渊源。

#的核心功能:预处理器指令

C++预处理器指令是在编译器处理源代码之前执行的一系列指令。一般认为它们不是C++语言的一部分,因为这些语法由预处理器解释和执行,并非编译器。

预处理器指令以 # 开头,常见的指令有:

#include 包含文件

#include 指令用于将一个文件的内容包含到当前文件中。有两种形式:

  • #include <filename>:从标准库或系统目录中包含文件。
  • #include "filename":从当前目录或用户指定的路径中包含文件。

#define 定义宏

#define 指令用于定义宏。宏可以是简单的文本替换,也可以是参数化的宏。例如:

#define PI 3.14159
#define SQUARE(x) ((x) * (x))

宏在代码中被展开,以实现代码的简洁和可读性,但使用不当也可能导致难以调试的错误。

# if 条件编译指令

条件编译指令用于控制哪些部分的代码将被编译。常用的指令包括:

  • #if:如果条件为真,编译其后的代码。
  • #ifdef:如果宏被定义,编译其后的代码。
  • #ifndef:如果宏未被定义,编译其后的代码。
  • #else:与 #if 或 #ifdef 配合使用,条件不成立时编译其后的代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值