gpt4 book ai didi

c - 为什么 "switch-case"将 #define 标识符视为常量而不是 const 限定变量?

转载 作者:太空狗 更新时间:2023-10-29 15:52:43 26 4
gpt4 key购买 nike

此程序产生以下错误:

case label does not reduce to an integer constant|

我根本不明白为什么一个显式声明的常量 third_cond,分配了初始化器 3,它也在函数体内,不被认为是 case 的常量3#define 的标识符 second_value 同时被认为是一个常量。如果我使用文字 3<,程序工作正常 而不是 third_cond 或简单地 #define third_cond 作为 3。请解释为什么会这样,除非这个问题是重复的。我检查了,但没有找到答案。

#include<stdio.h>
#define second_cond 2

int main()
{
const int third_cond=3;
int choice;
printf("Enter your choice\n");
scanf("%d",&choice);

switch(choice)
{
case 1:
printf("Beggar");
break;
case second_cond:
printf("Mugger");
break;
case third_cond:
printf("Lugger");
break;
default:
printf("Bugger");
}
}

最佳答案

在 C 语言中,const 不是常量,而是只读的。 const 限定变量永远不是常量,不能在需要常量表达式的地方使用。

请注意,您还可以将 enum 常量用于 case 常量表达式,因为 enum 常量是实常量。

关于c - 为什么 "switch-case"将 #define 标识符视为常量而不是 const 限定变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16236153/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com