c - 为什么多个源文件中的枚举不会导致链接错误?

标签 c enums

0.c

typedef enum nums{
 i = 1, j=2
} nums;
// int k = 5; <-- commented out

int main(){
 return i;
}

1.c

typedef enum nums{
 i = 1, j=2
} nums;
// int k = 5; <-- commented out

如果我使用 gcc 0.c 1.c 编译上述内容,我不会收到链接错误,但是,如果我取消注释 k 则会收到错误.

2 个问题:

1 - 枚举为何不受链接问题的影响,ij 不就是另一个 int 吗?

2- 如果具有相同名称的枚举在不同的翻译单元中具有不同的值,会发生什么情况?未定义的行为?

最佳答案

  1. 枚举定义枚举类型。标识符是整数常量。类型没有链接,这些枚举常量也没有链接。仅考虑对象和函数,并且其中仅具有外部链接的对象和函数。

  2. 没有什么特别的,只是它们不是兼容的类型。但是,如果您尝试互换使用这两个,则行为是未定义的。

关于c - 为什么多个源文件中的枚举不会导致链接错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64895216/

相关文章:

c - 如何在c中的函数中动态分配内存?

c++ - 客户端代码 : Memory leak for particular functions 中的 Valgrind Hook

c# - 如何使用枚举填充组合框 - 在组合框中显示枚举的整数(值)

Java 常量数组

c - 如何获取函数内 double 值的绝对值(不使用 math.h)

c - 内存分配的差异

c - GCC - 如何重新对齐堆栈?

java - 为什么在通过 REST API 调用时枚举并不总是有效?

scala - 如何在 scala 枚举值中添加点

python - 分类特征编码作为 Scikit-Learn 的枚举