[英]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.