#define到底有什么用?

What exactly is #define useful for?

本文关键字:什么 #define      更新时间:2023-10-16

现在,请原谅我,我是c++的新手。在学习c++的在线教程时,它提到#define的全部用途是定义一个常量,就像这样。

#define RANDOM_CONSTANT 288

我困惑的是,为什么不能通过创建这样的变量来完成呢?

int RANDOM_CONSTANT = 288;

除了定义常量,#define还有其他适用的用途吗?

#define用于定义预处理器执行的一些文本替换。如果你写

#define foo 417

,然后在程序中引用foo,标识符foo的所有实例将变成数字417。(例如,foo4将保持为foo4)

#define twice(x) x,x

则程序中出现的twice(417)将变成417,417

如果我是你,我就不会在这个阶段太过担心。

#define允许您在编译之前更改环境。例如,你可以使用#if RANDOM_CONSTANT来修改编译的代码。

这是非常有用的,以便您可以有条件地编译,例如,基于某些内容是否为#define d调试功能。

#define定义宏,而不是常量。例如,#define可能具有某些参数:

#define A(i) printf("%d", i)

这里似乎有两个问题需要解决:

  1. #define有什么用?
  2. 为什么使用常量而不是变量?

这些问题的答案是:

  1. #define可以做更复杂的事情,而不仅仅是用名称替换数字。它可以接受参数。例如:#define getmax(a,b) a>b?a:b不只是用名称替换数字。

  2. 两部分:首先,常量不能被程序编辑(因此得名;)),所以这在某种程度上是一种安全保护。其次,它是预编译的,而不是一个变量,所以它不占用存储空间,也不需要查找,使其更高效。