typedef struct并声明一个结构变量

时间:2013-06-11 11:11:44

标签: ios objective-c c

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

我宣布了一个结构:

typedef struct Message
{
    int    messageType;
    char   *data;
    int    length;
} Message;

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

struct Message *myMessage = NULL;

这很好,没问题。

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

两者:

struct Message *myMessage = NULL;

Message *myMessage = NULL;

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

5 个答案:

答案 0 :(得分:8)

是的,这是正确的。

关键字struct后面的名称(称为“struct tag”)与typedef别名不在同一“名称空间”中。这就是为什么他们没有碰撞并产生某种错误。

那就是说,你应该从你的声明中删除标签,然后就这样做:

typedef struct
{
    int    messageType;
    char   *data;
    int    length;
} Message;

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

答案 1 :(得分:4)

是的,这是预料之中的。 struct Message是一种类型,您的typedef已创建Message作为其别名。您可以在声明变量时使用。

答案 2 :(得分:2)

上述内容将struct Message及其“别名”声明为Message。两者都很好。

答案 3 :(得分:2)

这是typedef的正确行为。

答案 4 :(得分:0)

可能就是这个原因,我们已经建议按照上面的说法遵循typedef的命名约定。

struct Message {  
    int messageType;  
    char *data;  
    int length;  
}Message_t;  

以上是使用struct声明typedef的好习惯。在嵌入式中,您通常会发现它是Message_Type

相关问题