首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >编译器如何区分具有与结构同名的类型的typedef结构实现?

编译器如何区分具有与结构同名的类型的typedef结构实现?
EN

Stack Overflow用户
提问于 2020-05-12 08:26:10
回答 1查看 52关注 0票数 0

我一直在研究单链表,并交叉使用了两种不同的typedef struct实现。

第一个(在CS50讲解中):

代码语言:javascript
复制
// Represents a node:

typedef struct node
{
    int number;
    struct node *next;
}
node;

二(在CS50短视频解说):

代码语言:javascript
复制
typedef struct sllist
{
    int number;
    struct sllist *next;
}
sllnode;

我的问题是:在前面的实现中,编译器如何区分别名nodestruct node?例如,为什么它能够区分structtypedef,而我不能使用相同的变量名来表示intstring

EN

回答 1

Stack Overflow用户

发布于 2020-05-12 08:42:52

编译器如何区分节点,别名,节点,结构?

很简单:它们是两个不同的东西。一个前面是struct关键字,另一个不是。可以将typedef视为创建别名。如果编译器只看到node,它就会查看typedef来获取真正的类型,而如果看到struct node,它就已经知道类型了。

为什么它能够区分结构和类型定义函数,但是我不能使用相同的变量名来表示整型和字符串,例如?

这是一个不同的场景。不能重新定义已存在的类型名称。您不能执行typedef something int;,因为int已经存在,就像您不能执行以下操作一样:

代码语言:javascript
复制
struct s {
    int a;
};

struct s {
    int a;
};

此单一定义规则也适用于变量名和函数名。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61741691

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档