使用const关键字在c中定义常量

hic*_*sca 2 c constants

你能const在 C 中使用关键字定义一个常量吗?

我发现了相互矛盾的信息。

使用 #define 宏并对要测试的值进行硬编码。在这些情况下,代码将编译,但是当我使用 const 关键字时会引发错误。

int main(void){

  const int  TESTARRAYSIZE = 7;
  float user_array[TESTARRAYSIZE] = {5.1, 7.2, 5.1, 8.45, 23.0,
                                       67.123, 5.1};
  float number_in_question = 5.1;

  float frequency;

  frequency = user_array[1];

  printf("%.2f", frequency);

  return(0);
}
Run Code Online (Sandbox Code Playgroud)

编译错误: <filename>:22:3: error: variable-sized object may not be initialized

但是这个错误似乎主要是因为常量没有设置值。

nem*_*equ 5

使用const类型限定符不会使某些内容成为常量。C 中的常量有自己的定义。

有关const关键字的描述,请参见 C11 标准的第 6.7.3 ¶ 6 节:

如果尝试通过使用具有非 const 限定类型的左值来修改由 const 限定类型定义的对象,则行为未定义。如果尝试通过使用具有非 volatile 限定类型的左值来引用使用 volatile 限定类型定义的对象,则行为未定义。

你需要的是一个常量表达式;有关详细信息,请参阅 C11 的第 6.6 节。

如果你真正想知道的不是“WTF 是const预选赛?” 而是您的代码的正确解决方案是什么,答案很可能只是不指定数组的大小:

float user_array[] = {5.1, 7.2, 5.1, 8.45, 23.0, 67.123, 5.1};
Run Code Online (Sandbox Code Playgroud)

这通常被认为是很好的做法,因为它实际上使您的代码更加健壮。