打印
[其它应用]

C++ #define预处理,及宏的展开和定义

[复制链接]
3060|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
两只袜子|  楼主 | 2024-5-24 15:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
如果已经有C语言中预处理器的学习经验,且不打算复习一下,那么基本上可以跳过本章节中的内容了。因为C++中(预处理)宏的定义和使用与C语言中的基本一致。除此之外,在介绍完C++中的一些预处理指令之后,会专门用一个章节的篇幅来介绍一下预处理器及其作用的机制,个人认为,先介绍完预处理指令对理解预处理器有很大的帮助,反过来,对预处理器有所理解,对预处理指令的用法也会有更深层次的思考。

#define预处理
C++中,可以是用#define预处理指令来进行宏的定义。什么是宏呢?大致可以理解为C++中的一些符号常量,可以在C++编译器编译代码之前展开,进行代码中的文本替换(进一步的理解可参考下方的实例代码)。

#define定义宏的语法
#define macroName macroExpression

提示:宏的定义的语句末尾不使用“;”。

宏语法解析
macroName:宏名称标识符,如果是一般的常量的话(非宏函数之类的),那么会“约定俗成”地使用大写来表示;

macroExpression:为宏展开后用于替换的文本,可以是任意的C++表达式或语句;

宏的定义一般定义在C++的主函数之前,include包含的头文件之下;

宏的使用
C++中宏的使用方法与使用其它的常规的变量没什么区别,直接使用宏名称即可。

宏定义实例代码
如下实例代码,代码编译之前,会使用30和20(替换文本)来替换主函数内部的WIDTH和HEIGHT,然后再进行编译:

#include <iostream>
using namespace std;
#define WIDTH 30
#define HEIGHT 20

int main(){
   
    // 计算一个三角形的面积
    double area = WIDTH * HEIGHT / 2.0;
    cout << "三角形的面积为:" << area << endl;
    return 0;
}
代码编译运行后,得到输出:

三角形的面积为:300
免责声明:内容仅供参考,不保证正确性!

使用特权

评论回复
沙发
亚瑟| | 2024-5-24 19:44 | 只看该作者
宏定义为什么要加do while啊

使用特权

评论回复
板凳
yangjiaxu| | 2024-5-28 15:56 | 只看该作者
提示:宏的定义的语句末尾不使用“;”。这个是重点

使用特权

评论回复
地板
yangjiaxu| | 2024-5-28 15:57 | 只看该作者
亚瑟 发表于 2024-5-24 19:44
宏定义为什么要加do while啊

那里有do while?宏定义一般是不加逻辑运算的,都是直接定义一个变量

使用特权

评论回复
5
Henryko| | 2024-6-27 16:35 | 只看该作者
亚瑟 发表于 2024-5-24 19:44
宏定义为什么要加do while啊

这个是为了防止语句被错误结合

使用特权

评论回复
6
药无尘| | 2024-6-28 13:28 | 只看该作者
define在编译时起作用

使用特权

评论回复
7
狄克爱老虎油| | 2024-7-22 13:54 | 只看该作者
宏定义没有;吗

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2038

主题

7364

帖子

10

粉丝