您的位置:首页 > 其它

结构体的声明(extern)与调用的方式

2014-09-03 11:52 176 查看
结构体的声明(extern)与调用的方式  ( 转载 )

要求如下,在.h文件中这样定义:

 

typedef struct typFNT_GB16                 // 汉字字模数据结构

{

       signed char Index[2];               // 汉字内码索引

       char Msk[32];                       // 点阵码数据

};

struct typFNT_GB16 code GB_16[] =          // 数据表

{

"我", 0x20,0x24,0x24,0x24,0xFE,0x23,0x22,0x20,

      0xFF,0x20,0x22,0xAC,0x20,0x30,0x20,0x00,

      0x00,0x08,0x48,0x84,0x7F,0x02,0x21,0x10,

      0x09,0x06,0x1A,0x61,0x80,0xE0,0x00,0x00,

"们", 0x40,0x20,0xF8,0x07,0x00,0xF8,0x02,0x04,

      0x08,0x04,0x04,0x04,0x04,0xFE,0x04,0x00,

      0x00,0x00,0xFF,0x00,0x00,0xFF,0x00,0x00,

      0x00,0x00,0x00,0x40,0x80,0x7F,0x00,0x00

};

 

同时需要在多个.c文件中使用该struct, 但是多次include 该.h文件提示重复定义,应该修改如下:

新建一个xx.h和xx.c文件

在xx.h文件中定义该结构体,同时对结构体变量作extern:

typedef struct typFNT_GB16 // 汉字字模数据结构

{

signed char Index[2]; // 汉字内码索引

char Msk[32]; // 点阵码数据

};

extern struct typFNT_GB16 code GB_16[];

 

在xx.c文件中include该.h文件,同时作结构体变量的初始化:

#include "xx.h"

struct typFNT_GB16 code GB_16[] = // 数据表

{

"我", 0x20,0x24,0x24,0x24,0xFE,0x23,0x22,0x20,

0xFF,0x20,0x22,0xAC,0x20,0x30,0x20,0x00,

0x00,0x08,0x48,0x84,0x7F,0x02,0x21,0x10,

0x09,0x06,0x1A,0x61,0x80,0xE0,0x00,0x00,

"们", 0x40,0x20,0xF8,0x07,0x00,0xF8,0x02,0x04,

0x08,0x04,0x04,0x04,0x04,0xFE,0x04,0x00,

0x00,0x00,0xFF,0x00,0x00,0xFF,0x00,0x00,

0x00,0x00,0x00,0x40,0x80,0x7F,0x00,0x00
};

在其它.c文件中需要使用该结构体时,直接include .h文件即可这样编译通过。实际上结构体是一种数据类型,.h文件定义了一种类型的结构体,并声明为extern形式允许外部调用它,而初始化code GB_16[] 这个结构体应当在.c文件中进行。

类型的定义和类型变量的定义不同,类型定义只是描述一个类型,是给编译器看的,不会产生可执行代码。变量定义是指在执行文件中真实的存在这么一块内容。因此,类型定义可以重复出现也没关系,类型变量是不能在多个.c中出现,否则就是重复定义。因为每个.c里都要写清楚类型定义很麻烦,所以一般都把类型定义写在.h里,而在.c里采用简单的写
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: