gpt4 book ai didi

c - 是一个结构{...};一个类型或一个未命名的变量?

转载 作者:太空狗 更新时间:2023-10-29 17:18:20 28 4
gpt4 key购买 nike

在文件范围内,以下是类型声明还是未命名变量?

struct student_s {
char* name;
int age;
double height;
struct student_s* next;
};

如果是类型定义,那么和有什么区别:

typedef struct student_s {
char* name;
int age;
double height;
struct student_s* next;
};

?

(背景:请参阅我在 Changing a variable from global to local - C 的回答,我相信第一个引入了一个未命名的变量,然后由编译器优化掉。)

注意:该问题已被标记为可能与 In what scope is a struct member identifier put? 重复但我相信我不是在问有关成员范围的问题,而是在问声明实际创建的内容。然而。 Difference between 'struct' and 'typedef struct' in C++?的答案请解释我的问题。

最佳答案

根据 C 标准,结构声明的形式如下

struct student_s {
char* name;
int age;
double height;
struct student_s* next;
};

类型的声明。引用 C11,章节 §6.7.2.1

The presence of a struct-declaration-list in a struct-or-union-specifier declares a new type, within a translation unit. The struct-declaration-list is a sequence of declarations for the members of the structure or union. [...]

C 标准不强制为该类型创建变量(命名或未命名)。

在您的第二个片段中,您实际上(尝试)typedef nothing。但是,如果您将代码段更改为

typedef struct {
//.....members
} student_s ;

您将创建一个type student_s(typedef 为未命名的结构类型),稍后您可以使用它。

FWIW,无论如何,我们从未谈论过在这里创建变量。一切都与类型有关。

关于c - 是一个结构{...};一个类型或一个未命名的变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31877661/

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