如果初始化全局变量,EDC计算机将崩溃

如果初始化全局变量,EDC计算机将崩溃,c,enums,global-variables,payment,C,Enums,Global Variables,Payment,我在Ingenico工作。我在头文件中定义了一个enum变量,如下所示 global.h enum _MY_VARIABLES { _ONE, _TWO, _THREE } file1.c: #include "global.h" enum _MY_VARIABLES CurrentValue = -1; //Initializing global variable. 如果我初始化全局变量,EDC将崩溃,但如果我不按如下所示初始化它,EDC将正常工作: #include "global

我在Ingenico工作。我在头文件中定义了一个
enum
变量,如下所示

global.h

enum _MY_VARIABLES {
   _ONE, _TWO, _THREE
}
file1.c:

#include "global.h"
enum _MY_VARIABLES CurrentValue = -1; //Initializing global variable.
如果我初始化全局变量,EDC将崩溃,但如果我不按如下所示初始化它,EDC将正常工作:

#include "global.h"
enum _MY_VARIABLES CurrentValue; //Initializing global variable.
有人能告诉我们为什么EDC会这样做吗?我已经调试了代码,甚至检查了汇编语言,但找不到原因

我知道全局变量在默认情况下是用
0
初始化的,但我想用
-1
初始化它

我也可以按照下面的方法做,但我的思维迟钝,无法找到上述奇怪行为的解释

#include "global.h"
enum _MY_VARIABLES CurrentValue;
CurrentValue = -1; //Initializing global variable.

请注意,您不应该定义以下划线开头,后跟大写字母的名称;它们被保留供实现无条件使用。一般来说,你应该避免在名字上加下划线;其中大部分是为实现保留的,但额外的规则是微妙的。这与许多例子相反。请注意,系统头是实现的一部分,因此它们应该使用这样的名称来保护代码。但是这使它们成为了糟糕的示例。
global.h
在右括号后面有分号吗?请注意,枚举类型的变量的值应仅为枚举的一部分。您有1、2和3的名称(分别使用值0、1和2,这可能会导致混淆),但将变量初始化为不属于枚举的值。那很危险。如果希望将
-1
用于“未初始化”,则添加枚举:
enum MY_变量{ONE=1,TWO=2,THREE=3,uninitialized=-1}-请注意,前面的下划线与我之前的评论一致。@JonathanLeffler感谢您的回复。我将尝试你的建议,并张贴EDC行为。