typedef struct并声明一个结构变量

Mid*_* MP 2 c objective-c ios

目前我正在开发一个iOS应用程序,我正在使用结构来存储一些数据.

我宣布了一个结构:

typedef struct Message
{
    int    messageType;
    char   *data;
    int    length;
} Message;
Run Code Online (Sandbox Code Playgroud)

但是当我需要声明一个变量时,我不小心写了:

struct Message *myMessage = NULL;
Run Code Online (Sandbox Code Playgroud)

这工作正常,没有问题.

我的问题是为什么这条线没有显示任何问题?

两者:

struct Message *myMessage = NULL;
Run Code Online (Sandbox Code Playgroud)

Message *myMessage = NULL;
Run Code Online (Sandbox Code Playgroud)

工作正常.这是正确的行为typedef吗?为什么我使用时不会显示任何错误struct Message

unw*_*ind 8

是的,这是对的.

关键字后面的名称struct称为"struct tag",与typedef别名不在同一"名称空间"中.这就是他们没有碰撞并产生某种错误的原因.

也就是说,你应该从你的声明中删除标签,然后制作它:

typedef struct
{
    int    messageType;
    char   *data;
    int    length;
} Message;
Run Code Online (Sandbox Code Playgroud)

没有必要引入不需要的名称,这也可以保护您免受这种混淆,因为以前没有名字要写struct.