2个相似的typedef定义的差异

Differences in 2 similar typedef definition

本文关键字:定义 typedef 相似 2个      更新时间:2023-10-16

你可以这样定义一个Point结构体:

typedef struct
{
    int x, y;
} Point;

,也可以这样:

typedef struct Point
{
    int x, y;
};

有什么区别?

考虑下面给出的C代码,

typedef struct
{
    int x, y;
} Point;
int main()
{
  Point a;
  a.x=111;
  a.y=222;
  printf("n%d %dn",a.x,a.y);
}

上面的代码将执行,没有任何错误或警告,而下面的C代码将给你一个错误(error: 'Point' undeclared)和一个警告(warning: useless storage class specifier in empty declaration)。

typedef struct Point
{
    int x, y;
};
int main()
{
    Point a;
    a.x=111;
    a.y=222;
    printf("n%d %dn",a.x,a.y);
}

要纠正这个错误,你必须声明结构变量a,如下所示,

 int main()
 {
    struct Point a;
    a.x=111;
    a.y=222;
    printf("n%d %dn",a.x,a.y);
 }

第二个例子,typedef语句没有效果。编译器可能会忽略它或者给你一个警告。

与此代码的不同之处:

typedef struct Point
{
    int x, y;
} Point;

允许您将Point用作类型或结构体。我认为使用结构名作为类型,甚至作为变量是一种不好的做法,但您可以这样做。