-4

可能重复:
C 中的“static const”与“#define”

我的第一个想法是这是隐含的,但是你有没有理由使用const而不是#define

如果你设置了一个全局变量,你为什么要改变它,你又不想在全局范围内保护它?

4

3 回答 3

5

const 通常替换#define

#define是一个可以进行文本替换的预处理器宏。您可以使用它来定义常量或宏或执行各种其他操作。

const 是一种定义编译时常量的类型安全方式

这两种机制在编译过程中出现的时间不同,但总的来说,创建 const 是为了纠正#define.

我很少看到人们做类似的事情

#define CONSTINT  const int

但这是合法的。

于 2013-01-16T23:55:42.800 回答
4

const仅与在运行时传递的变量相关,以确保子例程无法更改它们。#define是一个预处理器编译时指令,它将您定义的任何内容替换为您定义的内容。因此,它们用于不同的目的。

于 2013-01-16T23:59:56.427 回答
2

编辑这是对您最初问题的回答,即您是否会使用const...define现在您已经编辑了问题以提出不同的问题,这真的没有意义。

A#define没有定义变量,所以无论如何你都不能改变它,所以这个问题没有意义。

这甚至是不可能的:

#define FOO 99

int main()
{
    FOO = 98;
}

因为预处理器用宏FOO替换了替换99,所以编译器看到这段代码:

int main()
{
    99 = 98;
}

And obviously that's nonsense. You can't assign to a literal, it's not a variable (const or not) it's just a value.

于 2013-01-17T00:04:25.383 回答