Когда использовать typedef в c?
может ли кто-нибудь сказать мне, когда использовать typedef в C? В следующем коде я получаю предупреждение gcc
:
warning: useless storage class specifier in empty declaration
typedef struct node
{
int data;
struct node* forwardLink;
} ;
6 ответов
так..
вы можете сделать это:
struct node {
int data;
struct node* forwardLink;
};
определить объект, который можно использовать как struct node
.
такой:
struct node x;
однако, скажем, вы хотели бы назвать его просто node
. Тогда вы могли бы сделать:
struct node {
int data;
struct node* forwardLink;
};
typedef struct node node;
или
typedef struct {
int data;
void* forwardLink;
} node;
и потом:
node x;
синтаксис typedef
is typedef <type> <name>
; он делает тип доступным через name
. В этом случае вы указали только type
, а не name
, Так что ваш компилятор жалуется.
вы, вероятно, хотите
typedef struct node
{
int data;
struct node* forwardLink;
} node;
использовать typedef
когда вы хотите использовать другое имя для типа, например, структуру.
в вашем случае, вместо того, чтобы использовать struct node
чтобы объявить переменную, вы можете вместо этого использовать просто Node
, как псевдоним для struct node
.
но вам не хватает псевдонима в вашей декларации:
typedef struct node
{
int data;
struct node* forwardLink;
} Node;
это выполняет то же самое, но может лучше осветить причину вашей ошибки:
struct node
{
int data;
struct node* forwardLink;
};
// this is equivalent to the above typedef:
typedef struct node Node;
typedef struct node
{
int data;
struct node* forwardLink;
} MyNode;
В случае, если вы хотите написать
MyNode * p;
вместо
struct node *p;
внутри структуры, вам все еще нужно struct node * forwardLink;
Typedef используется для определения типа данных пользователя. Например
typedef int integer;
теперь вы можете использовать integer для определения типа данных int вместо int.
integer a;// a would be declared as int only
для contants, которые являются списком возможных значений некоторой переменной:
typedef enum {BLACK=0, WHITE, RED, YELLOW, BLUE} TColor;
В общем, это помогает вам знать, правильно ли вы манипулируете вещами, потому что компиляторы предупредят вас о неявных отливках, среди прочего. Это более полезно, чем просто сделать ваш код более читаемым.