目前我正在开发一个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?
是的,这是对的.
关键字后面的名称struct称为"struct tag",与typedef别名不在同一"名称空间"中.这就是他们没有碰撞并产生某种错误的原因.
也就是说,你应该从你的声明中删除标签,然后制作它:
typedef struct
{
int messageType;
char *data;
int length;
} Message;
Run Code Online (Sandbox Code Playgroud)
没有必要引入不需要的名称,这也可以保护您免受这种混淆,因为以前没有名字要写struct.