读书人

关于构造体在多源文件的程序中的定义和

发布时间: 2013-09-14 13:03:22 作者: rapoo

关于结构体在多源文件的程序中的定义和声明
再多文件的源程序代码中,在一个文件中定义了一个结构体,同时在他的头文件中声明,然后再另一个源文件中调用,经常会提示后重复定义。

请问: 结构体的定义和声明,一般都是什么样的形式呢?可以可以写两个例程?这个问题遇到几次了,有书的时候想不起来,没书的时候就能遇到,呵呵,请各位不吝赐教,谢谢。
[解决办法]
要把结构体类型的定义和这种类型的变量的定义分开:


/* structs.h */

struct tag_B_MASK_STRUCT_NAME
{
U8 Bit1 :1;
U8 Bit2 :1;
U8 Bit3 :1;
U8 Bit4 :1;
U8 Bit5 :1;
U8 Bit6 :1;
U8 Bit7 :1;
U8 Bit8 :1;
}; /* 定义了一个结构体类型B_MASK_STRUCT_NAME */

extern struct tag_B_MASK_STRUCT_NAME b_Mask; /* 变量声明,允许重复出现 */
extern struct tag_B_MASK_STRUCT_NAME b_Mask; /* 变量声明,允许重复出现 */



/* variables.c */
struct tag_B_MASK_STRUCT_NAME; /* 这是结构体类型tag_B_MASK_STRUCT_NAME的声明 */
struct tag_B_MASK_STRUCT_NAME *p = NULL; /* 定义结构体指针类型的变量只需要结构体类型的声明 */

#include "h.h" /* 现在包含了tag_B_MASK_STRUCT_NAME的完整定义 */

struct tag_B_MASK_STRUCT_NAME b_Mask; /* 定义非指针类型的变量需要结构体类型的定义 */



/* using_b_Mask.c */

extern struct tag_B_MASK_STRUCT_NAME b_Mask; /* 声明结构体类型的变量不需要定义…… */
struct tag_B_MASK_STRUCT_NAME *q = &b_Mask; /* ……如果只用于地址操作 */
q->Bit1 = 1; /* ERROR 这样不行! */

#include "h.h" /* 包含了tag_B_MASK_STRUCT_NAME类型的定义 */

q->Bit1 = b_Mask.Bit2; /* 现在可以了 */



读书人网 >C语言

热点推荐