C语言中的枚举类型及其链接
以下代码为什么以及如何工作 a和b都有外部链接,但它们可以按无链接的类型声明吗 如果不是,为什么a.c中的MyEnum_t和b.c中的MyEnum_t之间没有冲突 a、 h b、 h a、 c 打印: 1. 三,C语言中的枚举类型及其链接,c,enums,linkage,C,Enums,Linkage,以下代码为什么以及如何工作 a和b都有外部链接,但它们可以按无链接的类型声明吗 如果不是,为什么a.c中的MyEnum_t和b.c中的MyEnum_t之间没有冲突 a、 h b、 h a、 c 打印: 1. 三, gcc版本4.5.0 20100604[gcc-4_5-branch修订版160292](SUSE Linux)编译后,enum类型及其值不再存在enum是一个C结构,与机器的实际运行方式无关。您完全可以在不同的转换单位中为特定的枚举类型指定不同的值。以后链接器将对此无能为力 如果您想
gcc版本4.5.0 20100604[gcc-4_5-branch修订版160292](SUSE Linux)编译后,
enum
类型及其值不再存在enum
是一个C结构,与机器的实际运行方式无关。您完全可以在不同的转换单位中为特定的枚举类型指定不同的值。以后链接器将对此无能为力
如果您想确保您的enum
类型是一致的,那么您可能应该在所有翻译单元包含的公共标题中放置一个定义
编辑注:不要使用带前导下划线的标识符。它们由实现保留。编译后,
enum
类型及其值不再存在enum
是一个C结构,与机器的实际运行方式无关。您完全可以在不同的转换单位中为特定的枚举类型指定不同的值。以后链接器将对此无能为力
如果您想确保您的enum
类型是一致的,那么您可能应该在所有翻译单元包含的公共标题中放置一个定义
编辑注:不要使用带前导下划线的标识符。它们由实现保留。侧节点:您可以简单地编写
typedef enum{ONE=1,TWO}MyEnum代码>在单步侧节点中:您可以简单地写入typedef enum{ONE=1,TWO}MyEnum代码>单步执行
#ifndef _A_H_
#define _A_H_
void print_a_enum();
#endif
#ifndef _B_H_
#define _B_H_
void print_b_enum();
#endif
#include "a.h"
#include <stdio.h>
enum MyEnum{ ONE = 1, TWO = 2};
typedef enum MyEnum MyEnum_t;
MyEnum_t a = ONE;
void print_a_enum()
{
printf("%d\n", a);
}
#include "b.h"
#include <stdio.h>
enum MyEnum{ ONE = 3, TWO = 4};
typedef enum MyEnum MyEnum_t;
MyEnum_t b = ONE;
void print_b_enum()
{
printf("%d\n", b);
}
#include "a.h"
#include "b.h"
int main()
{
print_a_enum();
print_b_enum()
}