打印

请问x这个联合体如何外部声明?

[复制链接]
977|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zhuww|  楼主 | 2022-10-14 21:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
函数,或变量做外部声明时用extern 那么联合体怎么外部声明呢?


比如 :
union abc{
unsigned char a;
unsigned char b;
};

union abc x;


请问x这个联合体如何外部声明?

使用特权

评论回复
沙发
wuhany| | 2022-10-14 21:47 | 只看该作者
声明
union abc{
unsigned char a;
unsigned char b;
};

extern union abc x;

使用特权

评论回复
板凳
stly| | 2022-10-14 21:52 | 只看该作者
变量和函数做外部声明是有点不同的。函数只要做extern申明就可以在外部文件调用。而变量需要在每个需要调用该变量的文件中进行声明

使用特权

评论回复
地板
llljh| | 2022-10-14 21:54 | 只看该作者

请问LS
难道函数不需要在每个调用的文件中声明吗?

使用特权

评论回复
5
dengdc| | 2022-10-14 21:56 | 只看该作者
很少用到extren函数

使用特权

评论回复
6
jiajs| | 2022-10-14 21:59 | 只看该作者
一般写成声明头文件。

使用特权

评论回复
7
zhuww|  楼主 | 2022-10-14 22:01 | 只看该作者
哦,这样啊

使用特权

评论回复
8
Henryko| | 2022-11-5 19:47 | 只看该作者
很少用到extren函数

使用特权

评论回复
9
tpgf| | 2022-11-8 10:10 | 只看该作者
/**
*声明结构体变量
*/
typedef struct{
    char number[30];     //学号
    char name[30];      //姓名
    char sex[30];       //性别
    char tel[30];       //电话
    char loc[30];       //地址
}Student;

typedef struct{
    Student* elem[N];     //储存空间的基地
    int length;     //数据结构的长度
}SqList;

使用特权

评论回复
10
磨砂| | 2022-11-8 10:21 | 只看该作者
结构体是一种类型,定义一种类型最好是在.h文件定义,这样其他地方想用这个结构体,只需包含此.h文件即可,但是定义结构体变量的话,最好载.c文件定义(为了防止重复定义,所以不建议在.h文件中定义变量),然后.h里面extern声明,其他.c文件想用只需包含那个属.h文件即可

使用特权

评论回复
11
晓伍| | 2022-11-8 10:51 | 只看该作者
结构体的声明(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文件中进行。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

893

主题

8252

帖子

1

粉丝