2017-09-15 13 views
1

複数のソースファイル間のプログラムの状態を定義する列挙型にアクセスする際に問題があります。私は、ヘッダmain.h異なるソースファイル間の外部列挙 - C

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列挙STATE状態;' - > 'のextern STATE状態;' –

+0

おかげで、試してみました。残念ながら、未定義の状態を参照しています。 – ConfusedCheese

+1

だから、オブジェクトファイルを –

答えて

1

あなたの問題への迅速な解決方法はこれにあなたの列挙型を変更することです:

個人的には、私は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. 
関連する問題