打印

请教:共用体变量外部调用方法

[复制链接]
6311|17
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
cd666|  楼主 | 2011-5-13 09:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
ayb_ice| | 2011-5-13 10:05 | 只看该作者
不能绝对定位
其它的看书,是基础

使用特权

评论回复
板凳
cd666|  楼主 | 2011-5-13 10:11 | 只看该作者
不是绝对定位的问题,我是需要外部调用共用体变量. 谢谢2楼的回答.

使用特权

评论回复
地板
原野之狼| | 2011-5-13 10:17 | 只看该作者
共用题内部元素搞个_at_,这样子不行的。

使用特权

评论回复
5
delin17| | 2011-5-13 10:19 | 只看该作者
把共用体定义到头文件中,变量放到文件中定义,然后再声名.

typedef union tagbyte4{
char
B3 _at_ 0;

char
B2 _at_ 1;

char    B1 _at_ 2;

char    B0 _at_ 3;

int
W1 _at_ 0;

int
W2 _at_ 2;

long
L;
}byte4;

程序中:
byte4 myuion;

使用特权

评论回复
6
cd666|  楼主 | 2011-5-13 11:06 | 只看该作者
谢谢5楼的回答,但这个也不对啊.

文件1如下:
union byte4{
int          W1;
long  L;
}myvar;

void main(void)
{
        myvar.L = 1;
}

文件2如下:
void test(void)
{
    myvar.L = 2;
}

要如何在文件中进行变量定义才能通过编译.  也许表述不清楚 ,我的目的就是:一个全局共用体格式的变量需要在多个文件中引用.

使用特权

评论回复
7
cd666|  楼主 | 2011-5-13 11:09 | 只看该作者
谢谢4楼的回答,共用体内部可以绝对定义,编译也不会有问题,我现在搞不定的是共用体变量外部引用.

使用特权

评论回复
8
ayb_ice| | 2011-5-13 11:31 | 只看该作者
本帖最后由 ayb_ice 于 2011-5-13 11:39 编辑
谢谢4楼的回答,共用体内部可以绝对定义,编译也不会有问题,我现在搞不定的是共用体变量外部引用.
cd666 发表于 2011-5-13 11:09

何以见得可以
请问
如果定义多个这种变量,请问如果定位.
即使可以编译通过,也可以肯定没有效果,一定会被编译器忽略

使用特权

评论回复
9
cd666|  楼主 | 2011-5-13 13:07 | 只看该作者
共用体只不过是一定的存储空间被使用了多个名字,并且按相应数据类型确定其数据长度.,加上绝对定位只不过是确定了数据的起始位置.
如上我定义的myvar如编译后地址为0x20.则myvar.L使用0x20,0x21,0x22,0x23这四个地址
myvar.W1则使用0x20和0x21,myvar.W2使用0x22,0x23
myvar.B3指向0x20,myvar.B2指向0x21,myvar.B1指向0x22,myvar.B0指向0x23,

当变量是全局变量时,像myvar.L = 0x12345678;
        myvar.W1 = 0x1111;
        myvar.W2 = 0x2222;
这种指令也不会被忽略的.

继续求助.

使用特权

评论回复
10
ayb_ice| | 2011-5-13 13:24 | 只看该作者
LZ
还是先去搞清楚什么叫共用体,虽然可能编译没有报错,但不表示是正确的

使用特权

评论回复
11
kvdong| | 2011-5-13 13:36 | 只看该作者
在一个头文件中声明共用体 ,声明变量。
一个文件中定义。
其他用到的文件中引用头文件即可;
T.h

union byte4{
int          W1;
long  L;
};

extern byte4 myvar;

T.c

#include <T.h>

byte4 myvar;

myvar.L=0x1234
...................


ATHEAR.c

#include <T.h>

int i;

i=myvar.W1;
...........
.........

使用特权

评论回复
12
cd666|  楼主 | 2011-5-13 13:42 | 只看该作者
在进行某些算法的C语言编程的时候,需要使几种不同类型的变量存放到同一段内存单元中。也就是使用覆盖技术,几个变量互相覆盖。这种几个不同的变量共同占用一段内存的结构,在C语言中,被称作“共用体”类型结构,简称共用体。注:在某些书籍中可能称之为“联合体”,但是“共用体”更能反应该类型在内存的特点。
这是百度的结果,我想我对以上内容还是能够理解的.
其实我的问题很简单的 如何外部引用共用体变量.至于共用体内部是否可以绝对定位和对其绝定定位有无意思,不是我的求助内容. 谢谢10楼的回复.

使用特权

评论回复
13
cd666|  楼主 | 2011-5-13 14:01 | 只看该作者
感谢11楼的回答 但头文件中extern那行是通不过编译的.

使用特权

评论回复
14
ayb_ice| | 2011-5-13 14:15 | 只看该作者
建议这样
//----------------
// union.h
typedef union{
....
}TU;

//----------------
// main.c
#include "union.h"

TU x;
...

//----------------
// lcd.c
#include "union.h"

extern TU x;
...

使用特权

评论回复
15
delin17| | 2011-5-13 14:34 | 只看该作者
本帖最后由 delin17 于 2011-5-13 14:36 编辑

都说的很明白了,你要把共用体类型定义放到头文件中.
你肯定还是放在C里面,具体可参考楼上,把extern TU x;最好也放到头文件中

使用特权

评论回复
16
cd666|  楼主 | 2011-5-13 15:48 | 只看该作者
谢谢 ayb_ice和delin17的热心帮助 之前之所以不行是因为没有使用typedef 进行类型定义. 现在总算明白了
extern 后面跟的是数据类型,使用共用体名称是无效的. 再次感谢各位的帮助.谢谢

使用特权

评论回复
17
delin17| | 2011-5-14 22:18 | 只看该作者
并不定是这样的..
如果没用typedef,应该是把union加上去..
extern union TU x;

使用特权

评论回复
18
xlsbz| | 2011-5-16 22:22 | 只看该作者
共用体就是不用掌握的一个数据类型。嗨  不用它不就得了 在大多数情况下。

当然 看需要

使用特权

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

本版积分规则

47

主题

153

帖子

0

粉丝