为什么会这样:
struct test {
int a;
};
typedef struct test * PTR_TEST;
但如果您这样做,则会出现以下警告:useless storage class specifier in empty declaration
static struct test {
int a;
};
typedef struct test * PTR_TEST;
为什么会这样:
struct test {
int a;
};
typedef struct test * PTR_TEST;
但如果您这样做,则会出现以下警告:useless storage class specifier in empty declaration
static struct test {
int a;
};
typedef struct test * PTR_TEST;
结构不能是静态的,静态是变量的属性。静态结构测试条目有效,但您缺少分配给此结构的变量的名称。那些。
在一般静态下 - 不可能像在 c# 中那样取出,但许多版本的 c++ 允许将结构的各个元素设为静态,即 如果您想要一个完全静态的结构,那么您必须分别使结构的每个元素成为静态。因为使用方法(有条件地)一切正常,所以字段的声明要复杂一些。它看起来像这样(在纯 C 中,这不起作用):
然后它也很有趣。可以通过两种方式访问“a”
使用此方法时,请不要忘记使用多线程可能会出现额外的困难,并且您通常需要额外使用多线程同步。
UDP:允许 C 和 C++ 声明静态的另一种不寻常的方式 - 在局部变量中标记静态将变量从堆栈区域移动到全局变量区域。
这不是一个赋值,而是一个默认的初始化器,所以在调用该方法之后,q 并不总是为零,而是在第一次调用之后,直到另一个值被赋值。没有这个 - 变量有可能是“垃圾”。如果这在 C 中没有特别的意义,那么您不需要
int test::a;在 pluses 中额外编写,这可能更方便,但会出现额外的调用(优化器很可能会删除)。在结构和类的情况下 - 如何使用默认初始化程序{}。此外,默认初始化程序很可能会将变量传输到 bss 区域(与全局变量大致相同,只是它不占用二进制文件中的空间)。比较以下语法:
struct A {/*...*/};- 结构定义struct A x, y;— 结构类型变量的定义struct A;——结构声明。实际上,这是相同的构造,只是在情况(1)和(3)中变量列表为空,而在(2)和(3)中,结构体被省略了。
因此,您可以这样写:
struct A {/*...*/} x, y;,同时定义该类型的结构体和变量。如果您编写
static A {/*...*/} x, y;,它将static仅应用于变量 (x,y),而不应用于结构本身A- 只有变量是静态的,而不是结构本身。因此,
static只有当变量列表不为空时才有意义。但是,显然是为了统一,static即使它是空的,他们也没有禁止它。