2017-09-15 145 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.