不同源文件之间的外部枚举 - C.

时间:2017-09-15 14:11:58

标签: c enumeration extern

我无法访问定义多个源文件之间程序状态的枚举。

我在标题main.h中定义了我的枚举

    typedef enum{ 
    STATE_HOME,
    STATE_SETUP,
    }STATE;

extern enum STATE state;

我在main.c中声明它

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

但是当我尝试在另一个源文件example.c中使用它时,它会显示“未定义的状态引用”:

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

2 个答案:

答案 0 :(得分:3)

解决问题的最快方法是将枚举更改为:

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语言命名空间的整个对话。

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

答案 1 :(得分: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.