看别人的代码,不知道是什么意思

炼气士 2011-07-04 07:36:28
typedef struct iic_di_data_t
{
unsigned char di_1 : 1;
unsigned char di_2 : 1;
unsigned char new_button_state : 1;
unsigned char last_button_state : 1;
} iic_di_data_t;

di_1:1这是什么用法,这样用有什么好处?

声明又加了 extern
extern data iic_di_data_t di_data;
extern data iic_switch_t iic_switch;
extern code const uint8 led_display_data[16];
还有函数也是
extern void init_di_data(void);
extern void read_di_sw_data(void);

为什么要用extern?
...全文
232 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
deng0411 2011-07-16
  • 打赏
  • 举报
回复
..........
chinajxyuxiawyq 2011-07-14
  • 打赏
  • 举报
回复
先再复习一下谭浩强书吧
LB0577 2011-07-14
  • 打赏
  • 举报
回复
谭浩强的书友详细介绍;
看一遍的时间不多;记忆深刻
梅名智 2011-07-05
  • 打赏
  • 举报
回复
unsigned char di_1 : 1;
这个是位域,请去看相关的资料
extern表明是外部引申进来的。具体去看书,extern关键词的说明
Simality 2011-07-05
  • 打赏
  • 举报
回复
原理上面都说了。


习惯上,每个.c文件配一个.h的同名头文件。

.c文件中可能被同一项目中其它.c文件引用的函数或变量要放到.h文件里。

变量前用extern修饰表示仅声明不定义,后面不允许带 = 赋值,否则造成重复定义。

函数只复制.c文件里的函数名,不带函数体,函数名就在该行以; 结尾。前面不需要写extern。

对于结构体,typedef并非必需。但对于跨.c文件的枚举变量由于其声明时赋值的特殊性,最好用typedef声明。
qiu807830053 2011-07-05
  • 打赏
  • 举报
回复
函数必须写出定义才分配地址来储存这个函数内容.写extern的话,变量无地址,函数不可以给出定义
Simality 2011-07-05
  • 打赏
  • 举报
回复
使用位域的时候注意big endian和little endian的区别。针对不同的平台和编译器,大小端不一样。也就是说,如果希望用位域变量对一个字节进行访问,这样定义:
union
{
struct
{
unsigned char DB0 : 1;
unsigned char DB1 : 1;
unsigned char DB2 : 1;
unsigned char DB3 : 1;
unsigned char DB4 : 1;
unsigned char DB5 : 1;
unsigned char DB6 : 1;
unsigned char DB7 : 1;
} DataBits;
unsigned char DataByte;
}MyData;


在一个编译环境下,MyData.DataByte这个变量的最低位可能是MyData.DataBits.DB0,而同样一套代码换了一个平台和编译器之后,最低位可能就变成了DB7。这个一定要留意。
jdygrdzh 2011-07-04
  • 打赏
  • 举报
回复
wangfan027说得对.
数据extern表明在其他文件里定义的,本文件在链接以前仅仅申明这个符号,不需要实际地址.连接器最后链接的时候会去全局符号表里找那个已经定义的符号,并填入地址.找不到就报错.如果不加,那么就相当于定义2个同名全局变量,会报错的.

函数无论加不加,本文件都不可以给出函数定义,而只可以给出声明,这样才会引用到别处定义好的函数.如果给出定义,那么就会和别处的定义冲突.

两者区别就是,不写extern的话,变量只要给出名字就相当于有分配地址了,函数必须写出定义才分配地址来储存这个函数内容.写extern的话,变量无地址,函数不可以给出定义.
dceacho 2011-07-04
  • 打赏
  • 举报
回复
数据extern表明在其他文件里定义的
函数extern我试了下好像不要也可以
schlafenhamster 2011-07-04
  • 打赏
  • 举报
回复
unsigned char di_1 : 1;
表示1位。

27,375

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧