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 - 枚举为何不受链接问题的影响,i
和 j
不就是另一个 int 吗?
2- 如果具有相同名称的枚举在不同的翻译单元中具有不同的值,会发生什么情况?未定义的行为?
最佳答案
枚举定义枚举类型。标识符是整数常量。类型没有链接,这些枚举常量也没有链接。仅考虑对象和函数,并且其中仅具有外部链接的对象和函数。
没有什么特别的,只是它们不是兼容的类型。但是,如果您尝试互换使用这两个,则行为是未定义的。
关于c - 为什么多个源文件中的枚举不会导致链接错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64895216/