C中的_StructName约定有什么意义?

时间:2015-04-28 09:50:13

标签: c gtk conventions

从GTK +库中读取一些来源后,我遇到了我认为是一段奇怪的代码:

typedef struct _GtkWidgetClass GtkWidgetClass;

...

struct _GtkWidgetClass
{
    ...
};

我对这段代码不了解的原因是它不是这样编写的:

typedef struct
{
    ...
} GtkWidgetClass;

我觉得我错过了什么...... 如果有人可以填写我为什么GTK(或其他任何代码)是以这种方式编写的,那将非常感激。

提前致谢

2 个答案:

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