2017-09-15 78 views
1

我无法访问定义多个源文件之间的程序状态的枚举。不同源文件之间的外部枚举 - 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); 
} 
+0

'的extern枚举状态的状态;' - >'的extern状态的状态;' –

+0

感谢和审判。不幸的是,它仍然说'未定义的状态参考'。 – ConfusedCheese

+1

所以你可能不会链接目标文件 –

回答

1

最快捷的解决问题的方法是将您的枚举改成这样:

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语言名称空间。

道歉没有更多的解释简洁的答案...

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.