C语言 - 结构声明和内部静态成员

时间:2018-05-31 13:38:42

标签: c struct static

我在技术书中找到了以下示例

struct {
    tBoolean logON;
    static enum eLogLevel outputLevel[NUM_LOG_SUBSYSTEM];
} sLogStruct;
static struct sLogStruct gLogData;

但我对结构声明的优点感到困惑,正式地说,应该是

struct name {
    ...
}

事实上,我做了一些试验,编译器在语句中出现错误(我真的尝试使用标准类型,而不是像 sLogStruct 那样)

static struct sLogStruct gLogData;

我怀疑是对,代码有问题吗?

此外,我想了解结构中 static 类存储的含义和范围,因为我没有找到任何令人满意的解释。让我们有像这样的结构声明

struct myStruct {
    int Foo;
    static int sFoo;
} strA, strB;

strA strB 是否有两个彼此独立的静态变量?

2 个答案:

答案 0 :(得分:1)

  

我怀疑是对,代码有问题吗?

是的,不知何故,代码有问题。

让我们仔细看看:

struct {
  tBoolean logON;
  static enum eLogLevel outputLevel[NUM_LOG_SUBSYSTEM];
} sLogStruct;

我们假设您在某处定义了成员的类型。

您声明了一个未命名的结构类型,并定义该类型的变量 sLogStruct没有结构标记没有类型名称已定义。

static struct sLogStruct gLogData;

由于没有类型struct sLogStruct,您无法定义该类型的变量。

  

此外,我想了解结构中静态类存储的含义和范围,因为我没有找到任何令人满意的解释。

没有任何意义。对于struct成员,添加static关键字没有任何意义,并且不允许这样做。

答案 1 :(得分:0)

struct的代码名称是可选的。

例如,以下内容将声明两个未命名s1类型的变量(s2struct):

struct
{
    int a;
} s1, s2;

void f()
{
    s1.a = 3;
    s2.a = 5;
}