不同源文件之间的外部枚举-C
我在访问定义多个源文件之间程序状态的枚举时遇到问题 我在头main.h中定义枚举不同源文件之间的外部枚举-C,c,enumeration,extern,C,Enumeration,Extern,我在访问定义多个源文件之间程序状态的枚举时遇到问题 我在头main.h中定义枚举 typedef enum{ STATE_HOME, STATE_SETUP, }STATE; extern enum STATE state; 我在主要文件中声明 #include "main.h" STATE state = STATE_HOME; 但当我尝试在另一个源文件example.c中使用它时,它会说“未定义对state的引用”: #include "main.h"
typedef enum{
STATE_HOME,
STATE_SETUP,
}STATE;
extern enum STATE state;
我在主要文件中声明
#include "main.h"
STATE state = STATE_HOME;
但当我尝试在另一个源文件example.c中使用它时,它会说“未定义对state的引用”:
#include "main.h"
void loop ()
{
UART(state);
}
解决问题的最快方法是将枚举更改为:
typedef enum STATE {
STATE_HOME,
STATE_SETUP,
} STATE;
但就我个人而言,我讨厌用C语言打字,正如你已经注意到的:命名混乱
我认为更可取的方法只是:
--主要条款h:
--主要条款c:
这避免了关于typedef的不同C语言名称空间的整个对话
抱歉回答得太简短,没有更多解释…
Extern
是在多个文件中使用全局变量的一种方法。
extern的简单方法是:
- 声明外部变量:这应该在头文件中完成。例如:州内声明。h:
- 外部变量定义:状态_definition.c
- 最后是用法:在STATE_usage.c中
这三件事都应该注意,那么没有什么东西会因为外部枚举状态而失败。
extern enum STATE代码>->外部状态代码>谢谢,我试过了。不幸的是,它仍然说“未定义对状态的引用”,因此您可能没有将对象文件与其链接extern state代码>确实很好。解决了问题。我需要在我的主()之外/上方申报
enum STATE {
STATE_HOME,
STATE_SETUP,
};
extern enum STATE state;
enum STATE state = STATE_HOME;
typedef enum{
STATE_HOME,
STATE_SETUP,
} STATE;
extern STATE state; /*Extern Declaration (NOTE:enum is not needed )*/
#include "STATE_Declaration.h"
STATE state = STATE_HOME;
#include "STATE_Declaration.h"
void loop ()
{
UART(state);
}