在C语言编程中常遇到的几个问题

来源:互联网 发布:xp网络连接ip地址设置 编辑:程序博客网 时间:2024/05/21 22:47

------------以下是整理以前在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
指针当作数据用的好处:在传递无符号数时,不用担心局部变量生命周期结束所导致变量值丢失这个问题
因为这里是传指针,而指针当作数据用。

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主要用于临界段的保护
其它的共享资源的互斥条件的满足一般通过信号量来保证

原创粉丝点击