在文件范围,以下是类型声明还是未命名变量?
struct student_s {
char* name;
int age;
double height;
struct student_s* next;
};
Run Code Online (Sandbox Code Playgroud)
如果是类型定义,那么有什么区别:
typedef struct student_s {
char* name;
int age;
double height;
struct student_s* next;
};
Run Code Online (Sandbox Code Playgroud)
?
(背景:请参阅我的答案将变量从全局变为本地 - C,我相信第一个引入了一个未命名的变量,然后由编译器对其进行优化.)
注意:该问题已被标记为可能重复的结构成员标识符放在什么范围内?但我相信我并不是在询问有关成员范围的问题,而是对申报实际创造的内容提出疑问.然而.回答C++中'struct'和'typedef struct'的区别?解释我的问题.
按照C
标准,结构声明的形式如
struct student_s {
char* name;
int age;
double height;
struct student_s* next;
};
Run Code Online (Sandbox Code Playgroud)
是一种类型的声明.引用C11
,第§6.7.2.1
struct-or-union-specifier中struct-declaration-list的存在在转换单元中声明了一个新类型.struct-declaration-list是结构或联合成员的一系列声明.[...]
C
standard不要求为该类型创建变量(命名或未命名).
在你的第二个片段中,你实际上(尝试)typedef
到什么.但是,如果您将代码段更改为
typedef struct {
//.....members
} student_s ;
Run Code Online (Sandbox Code Playgroud)
你将创建一个你可以在以后使用的类型 student_s
(typedef
到一个未命名的结构类型).
FWIW,我们从不谈论过这里创建的变量.这都是关于类型的.
归档时间: |
|
查看次数: |
1439 次 |
最近记录: |