2017-09-15 16 views
1

여러 소스 파일 사이의 프로그램 상태를 정의하는 enum에 액세스하는 데 문제가 있습니다.다른 소스 파일 간의 Extern 열거 - C

나는

typedef enum{ 
    STATE_HOME, 
    STATE_SETUP, 
    }STATE; 

extern enum STATE state; 

내가 내 main.c에

#include "main.h" 
STATE state = STATE_HOME; 

에 선언 main.h 내 헤더에 내 열거를 정의하지만 시도하고, 다른 소스 파일에서 예를 사용할 때. C, '정의되지 않은 상태 참조':

#include "main.h" 
void loop() 
{ 
UART(state); 
} 
+0

'통근 열거 STATE 상태;'->'통근 STATE 상태,' –

+0

감사했습니다. 불행히도 '정의되지 않은 참조 상태'라고 말합니다. – ConfusedCheese

+1

그래서 오브젝트 파일을 –

답변

1

가장 빠른 해결책은 열거 형을 다음과 같이 변경하는 것입니다.

typedef enum STATE { 
    STATE_HOME, 
    STATE_SETUP, 
} STATE; 

개인적으로, 나는 C 언어로 typedefing하는 것을 싫어하고 이미 알아 차렸 듯이 이름을 혼동합니다.

- 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.