首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

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

2013-09-14 
关于结构体在多源文件的程序中的定义和声明再多文件的源程序代码中,在一个文件中定义了一个结构体,同时在

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

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


/* 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;                       /* 现在可以了 */



热点排行