我无法访问定义多个源文件之间程序状态的枚举。
我在标题main.h中定义了我的枚举
typedef enum{
STATE_HOME,
STATE_SETUP,
}STATE;
extern enum STATE state;
我在main.c中声明它
#include "main.h"
STATE state = STATE_HOME;
但是当我尝试在另一个源文件example.c中使用它时,它会显示“未定义的状态引用”:
#include "main.h"
void loop ()
{
UART(state);
}
答案 0 :(得分:3)
解决问题的最快方法是将枚举更改为:
typedef enum STATE {
STATE_HOME,
STATE_SETUP,
} STATE;
但就个人而言,我讨厌用C语言输入内容,并且你已经注意到了:命名混乱。
我认为更优选的方法仅仅是这个:
- main.h:
enum STATE {
STATE_HOME,
STATE_SETUP,
};
extern enum STATE state;
- main.c:
enum STATE state = STATE_HOME;
这避免了关于typedef的不同C语言命名空间的整个对话。
为没有更多解释的简洁回答道歉......
答案 1 :(得分:0)
Extern is a way to use global varaible in multiple file.
Simple approach of extern is:-
Declare of extern varaible:-This should be dene in header file.
For ex:-STATE_Declaration.h
typedef enum{
STATE_HOME,
STATE_SETUP,
}STATE;
extern STATE state;/*Extern Declaration(NOTE:enum is not needed )*/
----------------------------------
Extern varaible defination:-
#include "STATE_Declaration.h"
STATE_defination.c
STATE state = STATE_HOME;
-----------------------------------
STATE_USAGE.c
#include "STATE_Declaration.h"
void loop ()
{
UART(state);
}
---------------------------------------
These 3 things should be take care than nothing will fail w.r.t extern.