为什么在结构中不能有静态成员?

问题描述 投票:0回答:2

首先,从这里:

static struct foo1 { //private struct, just for this file
    int a;
};

int main (void) {
    struct foo1 a = {10};
    return 0;
}

问题编号1

我会收到警告:

warning: useless storage class specifier in empty declaration
 };

是什么意思?为什么static是“无用的存储类说明符”?在其他情况下(函数中的静态局部var或全局静态,我想申请结构foo1,它将起作用)。

问题编号2

#include <stdbool.h>
static struct s_t{ //private struct (for this file only) 
    static bool is_there = false; // defaul (pre-defined) value for all instances
    int value;
};

int main (void) {}

为什么c中所有类型为struct s_t的变量都不能具有静态的预定义值?我只是想在多个调用中模拟与函数static local var-> preserve值相同的功能,从这个意义上讲,我想要一个成员[[preserve每个bool is_there类型的变量(其实例)上的值。那么为什么不可能呢?

问题编号3

而且,有人可以从中解释错误(从更一般的意义上说:

struct foo1

c struct static
2个回答
1
投票
因为struct就像类型或对象,当您在C中声明静态成员时,它像是:

error: expected specifier-qualifier-list before ‘static’

在这种情况下,“ int”就像您声明的结构类型,因此,如果要创建结构静态成员,请执行以下操作:

static int a = 0;


1
投票
  1. 因为static s_t a; 只是一个结构定义,而不是一个变量。声明结构实例时,应添加static struct foo1 { ...。我喜欢这种风格:

    static

  2. 因为C根本不像C ++那样具有静态成员变量。在C语言中,将存储或类型说明符添加到单个struct成员几乎没有用。将其放在分配的变量上。
© www.soinside.com 2019 - 2024. All rights reserved.