Язык C - объявление структуры и внутренние статические члены - PullRequest
0 голосов
/ 31 мая 2018

Я нашел следующий пример в технической книге

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

, но я был озадачен достоинством объявления структуры, которое формально должно быть

struct name {
    ...
}

на самом деле я делаю пробную версию, и компилятор выдает ошибку в заявлении (я действительно пытался использовать стандартные типы, а не что-то вроде sLogStruct )

static struct sLogStruct gLogData;

Это мое сомнениеправильно, а код неисправен?

Кроме того, я хотел бы понять значение и область хранения статического класса в структуре, поскольку я не нашел удовлетворительного объяснения.Давайте иметь объявление структуры, подобное этому

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

имеет ли strA и strB две статические переменные, независимые друг от друга?

Ответы [ 2 ]

0 голосов
/ 31 мая 2018

Правильно ли мое сомнение и код неисправен?

Да, каким-то образом код неисправен.

Давайте подробнее рассмотрим:

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

Давайте предположим, что вы где-то определяете типы членов.

Вы объявляете безымянный тип структуры и определяете переменную sLogStruct этого типа. отсутствует тег структуры и имя типа не определено не определено.

static struct sLogStruct gLogData;

Поскольку тип struct sLogStruct отсутствует, вы не можете определить переменную этого типа.

Кроме того, я хотел бы понять значение и объем хранения статических классов в структуре, поскольку я не нашел удовлетворительного объяснения.

Существуетнет смысла.Для членов структуры нет смысла добавлять ключевое слово static, и это не разрешено.

0 голосов
/ 31 мая 2018

Имя тега struct является необязательным.

Например, следующее объявит две переменные (s1, s2) безымянного struct типа:

struct
{
    int a;
} s1, s2;

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