结构体声明前加 static 是什么意思

2015-07-22 09:10:03 +08:00
 ivito
如下声明,static是一种存储类型,但声明明显是不分配内存的,那static的作用是什么的。
static struct node{
int key;
node *next;
};
4059 次点击
所在节点    C
11 条回复
cosiner
2015-07-22 09:17:35 +08:00
文件作用域吧
hellogmh
2015-07-22 09:19:24 +08:00
跟static加在普通函数(C的普通函数,不是C++的类成员函数)一样,链接的时候不会被其他模块引用,限制了在文件作用域内。
ivito
2015-07-22 09:21:16 +08:00
@cosiner
@hellogmh
那为什么在前边加个typedef就不行了呢,如下
typedef static struct node{
int key;
node *next;
};
ivito
2015-07-22 09:22:20 +08:00
@cosiner
@hellogmh
写错了,重新写
typedef static struct _node{
int key;
_node *next;
}node;
kkwezard
2015-07-22 09:36:04 +08:00
static不属于一个结构体的声明。你应该先typedef一个结构之后在用static修饰它的定义。
kkwezard
2015-07-22 09:43:01 +08:00
用static修饰结构体定义是不对的。至少我这编译不通过的。
townboy
2015-07-22 09:55:50 +08:00
二楼说的很有道理
ivito
2015-07-22 10:00:51 +08:00
@kkwezard 在VS下确实忽略了static修饰符,我提供的代码在《算法:C语言实现》这本书的英文版第27页,估计是作者的笔误。
kkwezard
2015-07-22 10:18:54 +08:00
@ivito vs貌似会忽略一些常见的错误。gcc下编译不通过。从字面上理解。用static修饰结构体的定义是没有意义的。实践中也不会这么用。个人拙见。
ivito
2015-07-22 10:23:40 +08:00
@kkwezard 同意,static只对产生内存对象的定义起作用
xylophone21
2015-07-22 10:31:08 +08:00
在.c里声明的结构体本身就无法被外部引用,所有二楼的说法应该是错误的。

注意:是结构体的声明,不是变量定义

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/207408

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX