C 枚举和结构的声明

C 枚举和结构的声明,c,c89,C,C89,我已经编写了一些文件:main.c、functions.c、functions2.c和header.h。functions.c和functions2中的一些函数使用我的一些枚举和结构 我必须将枚举和结构放在哪里?如何在functions.c和functions2.c中为它们编写声明?我的函数(来自不同的文件)必须看到它们 例如,我在header.h中编写了此类函数的声明: int func(void); void func2(int); #ifndef HEADER_H #define HEA

我已经编写了一些文件:main.c、functions.c、functions2.c和header.h。functions.c和functions2中的一些函数使用我的一些枚举和结构

我必须将枚举和结构放在哪里?如何在functions.c和functions2.c中为它们编写声明?我的函数(来自不同的文件)必须看到它们

例如,我在header.h中编写了此类函数的声明:

int func(void);
void func2(int);
#ifndef HEADER_H
#define HEADER_H

int func(void);
void func2(int);

enum eMyEnum
{
 eZero = 0,
 eOne,  
 eTwo
};

struct sMyStruct
{ 
 int i;
 float f;
};

#endif
但我不知道它是如何为枚举和结构编写的


关于函数的示例。c:

#include "header.h"

int func(void)
{
 ...
}

void func2(int)
{

}
header.h的示例:

int func(void);
void func2(int);
#ifndef HEADER_H
#define HEADER_H

int func(void);
void func2(int);

enum eMyEnum
{
 eZero = 0,
 eOne,  
 eTwo
};

struct sMyStruct
{ 
 int i;
 float f;
};

#endif

声明结构:

typedef struct <optional struct name>
{
   int    member1;
   char*  member2;

} <struct type name>;
typedef enum
{
    value_name,
    another_value_name,
    yet_another_value_name

} <enum type name>;
typedef结构
{
国际会员1;
char*member2;
} ;
以上述格式将所需的任何成员放入结构中,并使用所需的任何名称。 然后使用:

<struct type name> my_struct;
myu结构;
声明结构的实例

声明枚举:

typedef struct <optional struct name>
{
   int    member1;
   char*  member2;

} <struct type name>;
typedef enum
{
    value_name,
    another_value_name,
    yet_another_value_name

} <enum type name>;
typedef枚举
{
值和名称,
另一个\u值\u名称,
还有另外一个名字
} ;
按上面所述在枚举中放入任意值,并使用所需的任意名称。 然后使用:

<enum type name> my_enum;
my_enum;

声明枚举实例。

是否考虑过头文件(可能与原型所在的头文件相同),然后将其包含在
.c
文件中@WhozCraig如果我将其放在头文件中,那么枚举的定义和结构将复制到each.c文件中。在这种情况下,我将来会遇到问题吗?@Bush use header guard:@Bush abim已经发表了评论,下面的答案已经包括在内,使用header guard可以确保头数据的多个包含只被拉入源文件一次。在这和声明枚举和结构的正确语法之间,您应该可以很好地使用。@Bush和header guard都不是必需的。这里我们讨论的是声明。如果我把它放在头文件中,那么枚举的定义和结构将复制到each.c文件中。在这种情况下,我将来会遇到问题吗?不,这不是定义,只是声明。谢谢!现在我平静下来了。