在C语言中extern enum类型变量

在C语言中,extern enum类型的用法。

问题: 在一个头文件中定义enum变量,然后其他C文件或者H文件中使用该变量,该如何做?

仔细分析一下,其实道理很简单,直接上实例。

实例

def.h中声明enum类型,

1
2
3
4
5
6
7
8
#ifndef DEF_H
#define DEF_H

enum E {
A, B, C
};

#endif

a.h文件中定义enum类型变量e

1
2
3
4
5
6
7
8
9
10
#ifndef A_H
#define A_H

#include "def.h"

enum E e;

void a();

#endif

b.hc.h里面使用extern声明enum变量e

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
/* b.h */
#ifndef B_H
#define B_H

#include "def.h"

extern enum E e;

void b();

#endif

/* c.h */
#ifndef C_H
#define C_H

#include "def.h"

extern enum E e;

void c();

#endif

a.c, b.c, c.c几乎一样,都是实现各自的函数而已,

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
/* a.c */
#include <stdio.h>
#include "a.h"

void a() {
printf("a: %d\n", A);
}

/* b.c */
#include <stdio.h>
#include "b.h"

void b() {
printf("b: %d\n", B);
}

/* c.c */
#include <stdio.h>
#include "c.h"

void c() {
printf("c: %d\n", C);
}

最后是测试代码main.c

1
2
3
4
5
6
7
8
9
10
11
12
#include "a.h"
#include "b.h"
#include "c.h"

int main()
{

a();
b();
c();

return 0;
}

说明

def.h里面声明新的enum类型,a.h里面定义新的enum类型变量e
然后在b.h, c.h中使用该enum类型变量e,它们两个只是在使用e
并不重复定义,所以使用extern达到此目的。

(over)