不,通常,您不应该在C中使用const限定对象来创建名称常量。为了在C语言中创建命名常量,您应该使用宏(#define)或枚举。实际上,就您所暗示的意义而言,C语言没有常量。(在这方面,C与C ++明显不同)在C语言中,常量和常量表达的概念与C ++的定义非常不同。在C中,常数表示文字值,例如123。这是C 中常量的一些示例12334.58'x'C中的常量可用于构建常量表达式。但是,由于任何类型的const限定对象都不是C中的常量,因此无法在常量表达式中使用它们,因此,您不能在需要使用常量表达式的情况下使用const限定对象。例如,以下不是常数const int C = 123; /* C is not a constant!!! */并且由于上述C内容不是常量,因此不能用于在文件范围内声明数组类型typedef int TArray[C]; /* ERROR: constant expression required */不能用作案例标签switch (i) { case C: ; /* ERROR: constant expression required */}不能用作位域宽度struct S { int f : C; /* ERROR: constant expression required */};它不能用作具有静态存储持续时间的对象的初始化程序static int i = C; /* ERROR: constant expression required */它不能用作枚举初始化器enum { E = C /* ERROR: constant expression required */};即它不能在需要常量的任何地方使用。这似乎违反直觉,但这是C语言定义的方式。这就是为什么您#define在使用的代码中看到大量的-s的原因。同样,在C语言中,const限定对象的使用非常有限。它们基本上完全没有用做“常量”,这就是为什么在C语言中,您基本上不得不使用#define或枚举来声明真正的常量。当然,在使用const限定对象为您工作时(即它按您的意愿进行工作)的情况下,由于在范围和类型方面,它确实在许多方面优于宏。在适用的情况下,您可能应该首选此类对象,但是在一般情况下,您必须考虑上述限制。