C语言:在另一个文件中使用main.C文件中定义的枚举变量和类型时出现问题
我在main.c文件中定义了以下枚举和变量:C语言:在另一个文件中使用main.C文件中定义的枚举变量和类型时出现问题,c,enums,global,C,Enums,Global,我在main.c文件中定义了以下枚举和变量: enum state_codes { S0, S1, S2, S3, S4, S10, S20, S30, S40, S50, S60, S70, S80, fail, fsmError }; enum state_codes
enum state_codes { S0,
S1,
S2,
S3,
S4,
S10,
S20,
S30,
S40,
S50,
S60,
S70,
S80,
fail,
fsmError
};
enum state_codes cur_state = S0;
enum state_codes old_state = S0;
在我的项目的另一个文件(名为othercode.c)中,我必须在中断处理程序中使用cur_state变量和枚举中列出的值,因此我在othercode.c文件的顶部编写了以下声明:
第一个警告与声明有关:
extern enum state_codes;
另外两个错误是我用信号发送到代码中的那一行的函数,您不能定义
enum
typeextern
,因为其他编译单元需要知道其大小写的值。也就是说,将其放在标题中:
enum state_codes { S0,
// …
fsmError
};
并使用
enum state\u code
包含所有文件的头。变量仍然可以是extern
,例如extern enum state\u codes cur\u state
,enum
类型extern
本身无法定义,因为其他编译单元需要知道其大小写的值。也就是说,将其放在标题中:
enum state_codes { S0,
// …
fsmError
};
并使用
enum state\u code
包含所有文件的头。变量仍然可以是extern
,例如extern enum state\u codes cur\u state
在.h
文件中定义它,然后将该文件包含在使用它的所有.c
文件中
在我看来,这是最正确的方法 在
.h
文件中键入def,然后#将此文件包含在使用它的所有.c
文件中
在我看来,这是最正确的方法
extern
不提供单个enum
值的可见性。您需要将enum
放入一个标题中,并将其包含在您使用它的任何位置。谢谢,我刚编辑完就看到了您的答案!extern
不提供单个enum
值的可见性。您需要将enum
放入一个标题中,并将其包含在您使用它的任何位置。谢谢,我刚编辑完就看到了您的答案!如果这看起来不清楚,考虑一下我是否用<代码> EnUM <代码>创建了一个库,并且只发送了一个包含“代码> ExtEnEnm StuteSoC代码”的标题;代码>和已编译的二进制库。您或编译器将如何使用这些案例,例如S0
,甚至知道它们的存在?(这与<代码> >定义< /代码>的情况没有什么不同)。如果这不清楚,请考虑我是否用<代码> EnUM < /C>编写了一个库,并且只发送了一个包含“代码> ExtEnEnStuteSyx代码”的标题;代码>和已编译的二进制库。您或编译器将如何使用这些案例,例如S0
,甚至知道它们的存在?(这与#define
'd案例没有太大区别。)typedef
在这里不相关(问题中未提及),本身也没有任何帮助。typedef
在这里不相关(问题中未提及),本身也没有任何帮助。
extern enum state_codes;
enum state_codes { S0,
S1,
S2,
S3,
S4,
S10,
S20,
S30,
S40,
S50,
S60,
S70,
S80,
fail,
fsmError
};
extern enum state_codes cur_state;
enum state_codes { S0,
// …
fsmError
};