繁体   English   中英

C中typedef的好处是什么?

[英]What's the benefit of a typedef in C?

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

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

就像我不想说:

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确实存在(你可以把它想象成一个简单的排序的东西,如果这样做更容易 - struct sNode在上面的第1行创建, tNode在线4,这意味着你在第3行创建next指针,你必须使用结构名称)。

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

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

struct a {};

struct a A;

要么

typedef struct a {} a;

a A;

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

struct VIDEO_STREAM_CONFIG_CAPS vscc;

使用typedef struct它是:

VIDEO_STREAM_CONFIG_CAPS vscc;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM