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

不同源文件之间的外部枚举-C,c,enumeration,extern,C,Enumeration,Extern,我在访问定义多个源文件之间程序状态的枚举时遇到问题 我在头main.h中定义枚举 typedef enum{ STATE_HOME, STATE_SETUP, }STATE; extern enum STATE state; 我在主要文件中声明 #include "main.h" STATE state = STATE_HOME; 但当我尝试在另一个源文件example.c中使用它时,它会说“未定义对state的引用”: #include "main.h"

我在访问定义多个源文件之间程序状态的枚举时遇到问题

我在头main.h中定义枚举

    typedef enum{ 
    STATE_HOME,
    STATE_SETUP,
    }STATE;

extern enum STATE state;
我在主要文件中声明

#include "main.h"
STATE state = STATE_HOME;
但当我尝试在另一个源文件example.c中使用它时,它会说“未定义对state的引用”:

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

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

typedef enum STATE {
    STATE_HOME,
    STATE_SETUP,
} STATE;
但就我个人而言,我讨厌用C语言打字,正如你已经注意到的:命名混乱

我认为更可取的方法只是:

--主要条款h:

--主要条款c:

这避免了关于typedef的不同C语言名称空间的整个对话


抱歉回答得太简短,没有更多解释…

Extern
是在多个文件中使用全局变量的一种方法。 extern的简单方法是:

  • 声明外部变量:这应该在头文件中完成。例如:州内声明。h:
  • 外部变量定义:状态_definition.c
  • 最后是用法:在STATE_usage.c中

这三件事都应该注意,那么没有什么东西会因为外部枚举状态而失败。

extern enum STATE->
外部状态谢谢,我试过了。不幸的是,它仍然说“未定义对状态的引用”,因此您可能没有将对象文件与其链接
extern state确实很好。解决了问题。我需要在我的主()之外/上方申报
enum STATE {
    STATE_HOME,
    STATE_SETUP,
};


extern enum STATE state;
enum STATE state = STATE_HOME;
typedef enum{ 
    STATE_HOME,
    STATE_SETUP,
} STATE;

extern STATE state; /*Extern Declaration (NOTE:enum is not needed )*/
    #include "STATE_Declaration.h"
    STATE state = STATE_HOME;
#include "STATE_Declaration.h"
void loop ()
{
    UART(state);
}