在C语⾔编程中常遇到的⼏个问题
------------以下是整理以前在C语⾔编程中遇到的问题------------------
1、C语⾔中,连接符/后⾯不能有空格。C语⾔中,连接符/后⾯不能有空格。
2、注意局部变量的⽣命周期,特别是指针变量作为函数实参时。
3、注意常量(指针、数据常量)是不允许修改的,如function("ADC0//0",(void *)100); 设原形为function(char *str,void *arg)不能修改"ADC0//0"。
4、可以把指针当作数据⽤,如上⾯,(void *)100是指针(地址),可以
int a;
a = (unsigned int)arg;//指针当作数据⽤,⼀般强制为int(不能是char,short),因为地址是32位的
a = *(unsigned int)arg;//取的内容,这⾥则得不到100值
若采⽤取内容⽅式,则int a=100;function("ADC0//0",(void *)&a);这样调⽤
指针当作数据⽤⼀般适合于基本类型数据(把32位地址看作数据),像结构体等就应该采⽤取内容⽅式了
注:int a=100;(void *)a则为指针100
enum c++指针当作数据⽤的好处:在传递⽆符号数时,不⽤担⼼局部变量⽣命周期结束所导致变量值丢失这个问题
因为这⾥是传指针,⽽指针当作数据⽤。
5、#define /的⽤法及#define本质理解,/在C中上⾏连接符,参考OSFile.c或testEnumMacro.c
6、枚举类型中,枚举值是常量(在函数外则是全局常量),参考OSFile.c或testEnumMacro.c
7、⽆符号数与有符号数的理解与注意问题(参考testSign.c):
⽆符号数:⽤原码表⽰uint8 tempU8;
有符号数:⽤补码表⽰(正数时与原码相等),如8位的0xff==-1,如int8 temp8=0xff;则a==-1==0xff
tempU8 = (uint8)temp8;则tempU8==0xff
就是说:⽆符号数、有符号数的值⽤⾮⼗进制数(常⽤⼗六进制数)还表⽰是⼀样的,只是⼗进制数不同,
如0xff,⽆符号数、有符号数都==0xff,⼗进制则:⽆符号数==255,有符号数==-1
8、调试时,⽤来观察的变量⼀般定义为volatile类型的局部数组变量或全局变量
(⾮volatile类型的变量有时反应不出真实值)
中断程序会⽤到的全局变量⼀般也定义为volatile类型
volatile类型变量会占⽤多⼀些程序空间(⾮volatile类型⼀般被编译器优化了,所以占的程序空间较⼩)
9、不要滥⽤开、关中断函数。
OS_ENTER_CRITICAL和OS_EXIT_CRITICAL主要⽤于临界段的保护
其它的共享资源的互斥条件的满⾜⼀般通过信号量来保证
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论