我有一个.c文件和一个.h。
我不打算拥有多个.c文件。
我应该在头文件中放置结构定义吗?
最佳做法是什么?
.h
typedef struct cow_s {
int legs;
char eyes;
} cow_t;
和
.c
cow_t *ptr_to_cow;
注意:我不希望struct变为全局。
答案 0 :(得分:4)
如果您无意将此结构公开给其他模块(并且您说您只有一个模块),则没有任何理由将其放在头文件中,除非保留订单。
答案 1 :(得分:2)
结构定义属于.h文件(通常)。如果要隐藏结构,请将其放在将要使用它的.c文件中。
答案 2 :(得分:2)
这取决于您打算如何让用户使用该结构。如果允许它们实例化和修改成员,则需要将定义放在头文件中。另一方面,如果用户不需要访问结构成员,则应将其放在.c文件中。
让我们假设它是后一种情况。如果是这样,cow_t
对用户来说是不透明的,您需要为它创建访问器功能。例如:
cow_t *CreateCow( void )
{
return malloc( cow_t );
}
void SacrificeCow( cow_t *cow )
{
free( cow );
}
int GetNumberOfCowLegs( cow_t *cow )
{
return cow->legs;
}
void SetNumberOfCowLegs( cow_t *cow, int numLegs )
{
cow->legs = numLegs;
}