gpt4 book ai didi

c - 为什么我们不能在文件范围内 typedef 一个(未命名)结构两次,但我们可以 typedef "int"两次而不会出现错误?

转载 作者:行者123 更新时间:2023-12-02 03:50:46 24 4
gpt4 key购买 nike

以下代码编译并运行良好:

#include <stdio.h>

typedef int Someint;
typedef int Someint;

int main()
{
Someint b = 4;
printf("%d", b);
return 0;
}

以下代码无法编译。它给了我一个错误'Somestruct'的类型冲突

#include <stdio.h>

typedef struct
{
int x;
}
Somestruct;

typedef struct
{
int x;
}
Somestruct;

int main()
{
Somestruct b;
b.x = 4;
printf("%d", b.x);
return 0;
}

为什么我可以typedef一个type(第一个代码中的int)两次没有错误,但相同对于另一种类型(上面的结构),事情失败了?这两种情况有什么区别?我使用的是 CodeBlocks 12.11 附带的 MinGW 编译器。

最佳答案

问题是,当你这样做时:

typedef struct
{

} Somestruct;

它创建一个匿名结构 - 您可以期望使用一些隐藏的实现定义的保证唯一的占位符标识符 - 您可以为其指定 typedef。因此,当您执行两次时,您会遇到冲突,因为要求使用相同的 typedef 名称来引用两个不同的结构。使用 int,您只需重复原始内容。如果你给结构一个实际的名称,那么你就可以重复 typedef:

typedef struct Somestruct
{

} Somestruct;

关于c - 为什么我们不能在文件范围内 typedef 一个(未命名)结构两次,但我们可以 typedef "int"两次而不会出现错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16415116/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com