C中typedef的好处是什么?

时间:2010-10-14 02:39:46

标签: c typedef

typedef struct _VIDEO_STREAM_CONFIG_CAPS
{
  GUID guid;
  ULONG VideoStandard;
  SIZE InputSize;
  SIZE MinCroppingSize;
  SIZE MaxCroppingSize;
  int CropGranularityX;
  int CropGranularityY;
  int CropAlignX;
  int CropAlignY;
  SIZE MinOutputSize;
  SIZE MaxOutputSize;
  int OutputGranularityX;
  int OutputGranularityY;
  int StretchTapsX;
  int StretchTapsY;
  int ShrinkTapsX;
  int ShrinkTapsY;
  LONGLONG MinFrameInterval;
  LONGLONG MaxFrameInterval;
  LONG MinBitsPerSecond;
  LONG MaxBitsPerSecond;
}  VIDEO_STREAM_CONFIG_CAPS;

为什么不直接定义structure VIDEO_STREAM_CONFIG_CAPS而不是涉及_VIDEO_STREAM_CONFIG_CAPS

3 个答案:

答案 0 :(得分:5)

非常简单(至少对我来说)因为有些人喜欢将用户定义的类型视为“主要”类型。

就像我不想说:

struct int i;

我更喜欢:

VIDEO_STREAM_CONFIG_CAPS vscc;

为:

struct VIDEO_STREAM_CONFIG_CAPS vscc;

事实上,我通常完全摆脱结构标签,更喜欢:

typedef struct {
    GUID guid;
    ULONG VideoStandard;
    :
} VIDEO_STREAM_CONFIG_CAPS;

我唯一一次使用标签是因为我必须在类型定义本身中引用类型,例如在链表中:

typedef struct sNode {
    char paylod[128];
    struct sNode *next;
} tNode;

这是因为,在创建定义时,tNode尚不存在但struct sNode确实存在(如果这样做更容易,您可以将其视为一个简单的排序事件 - {{ 1}}在第4行的{1}}上创建,这意味着在第3行创建struct sNode指针,你必须使用结构名称。)

在您引用的情况下,结构标记至少在显示的代码中是多余的。是否其他部分代码声明了具有结构名称而不是typedef名称的变量尚不清楚。

答案 1 :(得分:3)

在c中,您必须将struct放在结构类型的声明之前。如果没有此typedef,则每次要使用它时都必须编写struct VIDEO_STREAM_CONFIG_CAPS。使用typedef,你可以像在c ++中一样说VIDEO_STREAM_CONFIG_CAPS

struct a {};

struct a A;

OR

typedef struct a {} a;

a A;

答案 2 :(得分:3)

在这种情况下,每次声明类型为VIDEO_STREAM_CONFIG_CAPS的变量时,都需要以下语法:

struct VIDEO_STREAM_CONFIG_CAPS vscc;

typedef struct是:

VIDEO_STREAM_CONFIG_CAPS vscc;