从GTK +库中读取一些来源后,我遇到了我认为是一段奇怪的代码:
typedef struct _GtkWidgetClass GtkWidgetClass;
...
struct _GtkWidgetClass
{
...
};
我对这段代码不了解的原因是它不是这样编写的:
typedef struct
{
...
} GtkWidgetClass;
我觉得我错过了什么...... 如果有人可以填写我为什么GTK(或其他任何代码)是以这种方式编写的,那将非常感激。
提前致谢
答案 0 :(得分:6)
从严格的编码角度来看,它没有任何意义。但是,在头文件中,它可以作为一种接口定义,列出GTK +的“公共”接口。顺便说一句,这种风格遵循其他GNU库。
无论如何,我认为我们可以肯定地说,使用现代C编译器和工具,它并没有太多意义,但GTK +实际上并不是一个新的库,所以它可以包含一些古老的编码约定。
答案 1 :(得分:3)
第一种情况允许您为成员使用struct
的(typedefed)名称:
typedef struct _node node;
struct _node
{
int value;
node *next; /* valid */
};
typedef struct
{
int value;
node *next; /* not valid (unknown type name ‘node’) */
} node;