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
?
答案 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;