C语言枚举变量声明后仍报错,函数内使用正常的原因咨询
为什么全局枚举变量赋值报错,函数内却正常?
嘿,这个问题我太熟悉了,核心原因是C语言对全局作用域和函数局部作用域的代码执行规则有明确区分,咱们拆开来唠:
1. 全局作用域的“禁区”
在函数外面的全局区域,你只能做一件事:声明/定义变量、类型,或者用常量表达式直接初始化变量。你报错的代码里:
enum mar_status { single = 100, married = 200, divorced = 300, widowed = 400 }; enum mar_status per1, per2; per1 = single; // 这两行就是“越界”操作! per2 = married;
per1 = single; 和 per2 = married; 属于赋值执行语句,是需要程序运行起来后才会执行的代码,但全局作用域根本不允许出现这类语句——它只负责“搭架子”,不负责“干活”。
2. 函数内部的“自由区”
而函数(比如你写的global())内部属于程序的执行代码块,这里是专门用来写各类运行时逻辑的,赋值、打印、判断啥的都能写,所以你的代码在函数里就能正常跑起来。
给全局代码的修正方案
要是你想给全局枚举变量赋值,有两种靠谱的办法:
- 办法一:声明变量时直接初始化
enum mar_status { single = 100, married = 200, divorced = 300, widowed = 400 }; enum mar_status per1 = single; enum mar_status per2 = married;
- 办法二:在
main()或者其他函数里给全局变量赋值
enum mar_status { single = 100, married = 200, divorced = 300, widowed = 400 }; enum mar_status per1, per2; int main() { per1 = single; per2 = married; // 这里可以加其他操作,比如打印 printf("The person 1 is %d and person 2 is %d\n",per1,per2); return 0; }
内容的提问来源于stack exchange,提问作者Jayakumar
相关产品推荐
相关产品推荐

