Cでtypedefをいつ使用するか教えてもらえますか? 次のコードでは、次のように警告が表示されgcc
ます。
warning: useless storage class specifier in empty declaration
typedef struct node
{
int data;
struct node* forwardLink;
} ;
の構文typedef
はtypedef <type> <name>
;です。を介してタイプにアクセスできるようにしname
ます。この場合、指定したのは。のみであり、指定してtype
いないname
ため、コンパイラは文句を言います。
あなたはおそらくしたい
typedef struct node
{
int data;
struct node* forwardLink;
} node;
それで..
あなたはこれを行うことができます:
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
します。
あなたの場合、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 は、ユーザー データ型を定義するために使用されます。例えば
typedef int integer;
int の代わりに、integer を使用して int データ型を定義できるようになりました。
integer a;// a would be declared as int only
typedef struct node
{
int data;
struct node* forwardLink;
} MyNode;
書きたい場合は
MyNode * p;
それ以外の
struct node *p;
構造体の内部には、まだ構造体ノード * forwardLink; が必要です。
いくつかの変数の可能な値のリストである定数の場合:
typedef enum {BLACK=0, WHITE, RED, YELLOW, BLUE} TColor;
一般に、コンパイラは特に暗黙のキャストについて警告するため、物事を正しく操作しているかどうかを知るのに役立ちます。コードを読みやすくするだけではありません。