你能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
但是这个错误似乎主要是因为常量没有设置值。
使用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)
这通常被认为是很好的做法,因为它实际上使您的代码更加健壮。
| 归档时间: |
|
| 查看次数: |
411 次 |
| 最近记录: |