我对C语言中静态结构的成员变量有疑问。
有人说我们可以声明一个static struct
,但是在C中,struct没有像C ++中的类那样的静态成员,这是什么意思?如果我声明一个静态结构,那么成员变量的状态是什么?有人可以帮我这个吗?
答案 0 :(得分:7)
请注意,静态结构本身与结构的静态成员不同。虽然您可以声明一个静态结构变量:
static struct MyStruct s;
您无法使用静态成员定义结构类型:
struct MyStruct {
static int i; // <- compiler error
};
这样做的原因是在C中,struct是一种类型 - 声明一种类型,对于该类型的多个实例,成员变量总是相同的实例(即静态),这只是无意义的。在C ++中,结构体实际上是类(它们仅在成员的默认可见范围内不同),而在C ++中,静态关键字在这种情况下意味着其他东西。它意味着一个类方法 - 但由于C没有类和方法,因此这没有意义,在C中无效。
获得的经验:C ++不是C。
答案 1 :(得分:3)
我对C语言中静态结构的成员变量有疑问。
有人说我们可以声明一个静态结构
正确/法律:
// (global scope)
static struct t_struct {
int a;
} THE_STATIC_VARIABLE;
但是在C中,struct没有像C ++中的类那样的静态成员
// (global scope)
struct t_ill_struct {
static int a; // << ill-formed in C, but valid in C++
};
这是什么意思?如果我声明一个静态结构,那么成员变量的状态是什么?有人可以帮我这个吗?
使用上面的示例,这意味着THE_STATIC_VARIABLE
将具有静态存储。以下是等效的:
<强> A 强>
// (global scope)
static struct t_struct {
int a;
} THE_STATIC_VARIABLE;
<强>乙强>
// (global scope)
struct t_struct {
int a;
};
static struct t_struct THE_STATIC_VARIABLE;
也就是说,每个看到THE_STATIC_VARIABLE
定义的翻译都会得到自己的副本。
如果您想要与静态C ++成员具有相同的效果,则必须在另一个范围内声明它 - 在结构声明之外:
// file.h
// (global scope)
struct t_struct {
int a;
};
extern struct t_struct THE_GLOBAL_VARIABLE;
// file.c
struct t_struct THE_GLOBAL_VARIABLE;
现在我们确实只有一个,就像在C ++中一样。
答案 2 :(得分:3)
static
表示:
在C ++中,还有一个额外的含义: