究竟#define到底有用吗?

时间:2014-08-11 21:53:35

标签: c++ constants

现在,请耐心等待,我是的新手。在关注的在线教程时,它提到所有#define用于定义常量,就像这样。

#define RANDOM_CONSTANT 288

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

int RANDOM_CONSTANT = 288;

除了定义常量之外,#define是否还有其他适用的用途?

4 个答案:

答案 0 :(得分:2)

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

这非常有用,因此您可以有条件地编译,例如,根据某些事物是否#define来调试功能。

答案 1 :(得分:2)

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

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

答案 2 :(得分:2)

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

#define foo 417

然后在您的计划中引用foo,标识符foo的所有实例都将转换为数字417。 (例如,foo4将保留为foo4。)

#define twice(x) x,x

然后,您的计划中出现的twice(417)将变为417,417

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

答案 3 :(得分:1)

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

  1. 什么是#define对您有用?
  2. 为什么要使用常量而不是变量?
  3. 答案是:

    1. #define可以执行更复杂的操作,然后只需用名称替换数字即可。它实际上可以采取参数。例如:#define getmax(a,b) a>b?a:b不仅仅用名称替换数字。

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