不同源文件之间的外部枚举 - C
问题描述:
我无法访问定义多个源文件之间的程序状态的枚举。不同源文件之间的外部枚举 - C
我定义我的枚举在我的头main.h
typedef enum{
STATE_HOME,
STATE_SETUP,
}STATE;
extern enum STATE state;
我宣布它在我的main.c
#include "main.h"
STATE state = STATE_HOME;
,但是当我尝试使用它在另一个源文件的例子。 C,它说“未定义的引用状态”:
#include "main.h"
void loop()
{
UART(state);
}
答
最快捷的解决问题的方法是将您的枚举改成这样:
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语言名称空间。
道歉没有更多的解释简洁的答案...
答
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.
'的extern枚举状态的状态;' - >'的extern状态的状态;' –
感谢和审判。不幸的是,它仍然说'未定义的状态参考'。 – ConfusedCheese
所以你可能不会链接目标文件 –