разъяснение синтаксиса typedef - PullRequest
0 голосов
/ 11 января 2019

У меня небольшая путаница между приведенными ниже декларациями - не могли бы вы помочь прояснить ситуацию?

typedef struct {
  int a;
  int b;
} example;

А это

struct something {
  int a;
  int b;
} ob;

И я не уверен, что бы означало нижеприведенное?

typedef struct foo {
  int a;
  int b;
} bar;

Ответы [ 2 ]

0 голосов
/ 11 января 2019

С

typedef struct {
  int a;
  int b;
} example;

вы определяете безымянную структуру, но определяете псевдоним типа example для структуры. Это означает, что вы можете создавать только экземпляры структур, используя example «тип», например,

example my_example_structure;

С

struct something {
  int a;
  int b;
} ob;

вы определяете структуру с именем something и экземпляр (переменную) этой структуры с именем ob. Вы можете использовать struct something для создания новых переменных структуры:

struct something my_second_ob;

Переменная ob может использоваться как любой другой экземпляр структуры:

printf("b = %d\n", ob.b);

Наконец, с

typedef struct foo {
  int a;
  int b;
} bar;

вы определяете структуру с именем foo, поэтому вы можете использовать, например, struct foo для определения переменных. Вы также определяете псевдоним типа bar, который также можно использовать. Как например

struct foo my_first_foo;
bar my_second_foo;

Общий синтаксис для typedef:

typedef <actual type> <alias name>;

В последнем случае ваших примеров, <actual type> равен

struct foo {
  int a;
  int b;
}

и <alias name равно bar.

0 голосов
/ 11 января 2019
typedef struct {
  int a;
  int b;
} example;

Этот определяет безымянный тип структуры и вводит example как псевдоним типа для этого типа структуры. Поэтому вы можете ссылаться на этот тип структуры только как пример.

struct something {
  int a;
  int b;
} ob;

Этот тип определяет тип структуры something, а также объявляет объект ob этого типа. Вы можете ссылаться на тип структуры только как struct something.

typedef struct foo {
  int a;
  int b;
} bar;

Этот определяет тип структуры с именем foo и вводит bar как псевдоним типа для этого типа структуры. Вы можете ссылаться на этот тип структуры как struct foo или bar.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...