我是C编程的初学者,但我想知道在定义结构时使用typedef与不使用typedef之间有什么区别。在我看来,这两者并没有什么区别,它们实现的目标是一样的。
struct myStruct{
int one;
int two;
};
vs.
typedef struct{
int one;
int two;
}myStruct;
我是C编程的初学者,但我想知道在定义结构时使用typedef与不使用typedef之间有什么区别。在我看来,这两者并没有什么区别,它们实现的目标是一样的。
struct myStruct{
int one;
int two;
};
vs.
typedef struct{
int one;
int two;
}myStruct;
当前回答
在C语言中,结构、联合和枚举的类型说明关键字是强制性的,也就是说,当引用类型时,你总是必须在类型名(它的标记)前面加上struct、联合或enum。
您可以通过使用typedef来摆脱关键字,这是一种信息隐藏的形式,因为在声明对象时,对象的实际类型将不再可见。
因此建议(参见Linux内核编码风格指南,第5章)只在以下情况下这样做 实际上,您希望隐藏这些信息,而不仅仅是为了节省一些按键。
你应该使用typedef的一个例子是不透明类型,它只与相应的访问器函数/宏一起使用。
其他回答
下面的代码创建了一个别名为myStruct的匿名结构:
typedef struct{
int one;
int two;
} myStruct;
没有别名就不能引用它,因为没有为结构指定标识符。
在C(不是c++)中,你必须像这样声明结构变量:
struct myStruct myVariable;
为了能够使用myStruct myVariable;相反,你可以对结构进行类型定义:
typedef struct myStruct someStruct;
someStruct myVariable;
你可以将结构定义和类型定义结合在一个声明匿名结构和类型定义的语句中。
typedef struct { ... } myStruct;
对于后一个示例,在使用结构时省略了struct关键字。所以在你的代码中,你可以这样写:
myStruct a;
而不是
struct myStruct a;
这节省了一些输入,并且可能更易于阅读,但这是一个品味问题
与其他构造一样,typedef用于为数据类型赋予新名称。在这种情况下,这样做主要是为了使代码更干净:
struct myStruct blah;
vs.
myStruct blah;
在C语言中,结构、联合和枚举的类型说明关键字是强制性的,也就是说,当引用类型时,你总是必须在类型名(它的标记)前面加上struct、联合或enum。
您可以通过使用typedef来摆脱关键字,这是一种信息隐藏的形式,因为在声明对象时,对象的实际类型将不再可见。
因此建议(参见Linux内核编码风格指南,第5章)只在以下情况下这样做 实际上,您希望隐藏这些信息,而不仅仅是为了节省一些按键。
你应该使用typedef的一个例子是不透明类型,它只与相应的访问器函数/宏一起使用。