枚举变量赋值疑问:为何main函数内可行,外部不可行?
为什么你的两段枚举代码一个可行一个不行?
嘿,这个问题其实和枚举类型本身没啥关系,核心是C语言对代码执行位置的规则限制!
先给你拆解清楚:
C语言里,全局作用域(也就是所有函数外面的区域)只能放「声明/定义」类的代码,比如定义变量、声明类型、函数原型这些;而像einFahrzeug = fahrrad;这种赋值操作,属于运行时执行的语句,必须放在函数内部(比如main函数,或者你自己定义的其他函数)。
第一段可行的代码分析
enum {fahrrad = 1, Auto = 2} einFahrzeug; int main() { einFahrzeug = fahrrad; // 这行在main函数内部,属于执行语句,完全合法 }
这里的赋值语句是放在main函数里的——main是程序的入口函数,函数内部就是用来写执行逻辑的,所以编译器完全接受这种写法。
第二段不可行的代码分析
enum {fahrrad = 1, Auto = 2} einFahrzeug; einFahrzeug = fahrrad; // 这行在全局作用域,属于执行语句,违反规则! int main() { ... }
这里的赋值语句直接写在了全局区域,也就是所有函数外面。C语言不允许在全局区域写这种需要程序运行时才执行的代码,所以编译器会报错。
如果你想在全局给变量赋值怎么办?
如果希望einFahrzeug一开始就被设为fahrrad,可以在定义变量的时候直接初始化(这属于声明的一部分,不是执行语句,所以合法):
enum {fahrrad = 1, Auto = 2} einFahrzeug = fahrrad; int main() { // 后续可以根据需求在函数内修改它的值 }
内容的提问来源于stack exchange,提问作者JimmyDiJim
相关产品推荐
相关产品推荐

