结构定义(不是实例化)应该放在头文件中吗?

时间:2011-07-14 06:37:35

标签: c struct typedef header-files

我有一个.c文件和一个.h。

我不打算拥有多个.c文件。

我应该在头文件中放置结构定义吗?

最佳做法是什么?

.h
typedef struct cow_s {
    int legs;
    char eyes;
} cow_t;

.c
cow_t *ptr_to_cow;

注意:我不希望struct变为全局。

3 个答案:

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