我的第一个想法是这是隐含的,但有没有理由使用const
代替#define
?
如果你设置了一个全局变量,你为什么要改变它,你也不想全局保护它?
答案 0 :(得分:5)
Const通常会替换#define
#define
是一个可以执行文本替换的预处理器宏。您可以使用它来定义常量或宏或执行各种其他操作。
const是一种定义编译时常量的类型安全方法
这两种机制在编译过程中的不同时间发生,但一般来说,const是为了纠正#define
的问题而创建的。
我很少见到人们会做像
这样的事情#define CONSTINT const int
但这是合法的。
答案 1 :(得分:4)
const
仅与在运行时传递的变量相关,以确保子例程不能更改它们。 #define
是一个预处理程序编译时指令,它将您定义的内容替换为您定义的内容。因此,它们用于不同的目的。
答案 2 :(得分:2)
修改这是对您原始问题的回答,即您是否将const
与define
一起使用......现在你真的没有意义我已经编辑了这个问题,问了不同的东西。
#define
没有定义变量,因此无论如何你都无法改变它,所以问题没有意义。
这甚至不可能:
#define FOO 99
int main()
{
FOO = 98;
}
因为预处理器将宏FOO
替换为替换99
,所以编译器会看到这段代码:
int main()
{
99 = 98;
}
显然那是胡说八道。你不能分配给一个文字,它不是一个变量(const或不是)它只是一个值。