嵌入式下的C语言精粹

1、为了避免那些只能包含一次的头文件被多次包含,可以在头文件中用编译时

条件来进行控制。例如:
/*my.h*/
#ifndef MY_H
#define MY_H
……
#endif

2、常用预编译指令
#  空指令,无任何效果
#include 包含一个源代码文件
#define 定义宏
#undef  取消已定义的宏
#if  如果给定条件为真,则编译下面代码
#ifdef  如果宏已经定义,则编译下面代码
#ifndef 如果宏没有定义,则编译下面代码
#elif  如果前面的#if给定条件不为真,当前条件为真,则编译下面代码
#endif  结束一个#if……#else条件编译块
#error  停止编译并显示错误信息
#warning 只显示错误信息

3、防止由于各种平台和编译器的不同,而产生的类型字节数
typedef unsigned char boolean; /* Boolean value type. */
typedef unsigned long int uint32; /* Unsigned 32 bit value */
typedef unsigned short  uint16; /* Unsigned 16 bit value */
typedef unsigned char  uint8; /* Unsigned 8 bit value */
typedef signed long int int32; /* Signed 32 bit value */
typedef signed short  int16; /* Signed 16 bit value */
typedef signed char  int8; /* Signed 8 bit value */

4、关键字static
1)在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变。
2) 在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问。它是一个本地的全局变量。
3) 在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用。那就是,这个函数被限制在声明它的模块的本地范围内使用。

5、关键字volatile
1) 并行设备的硬件寄存器(如:状态寄存器)
2) 一个中断服务子程序中会访问到的非自动变量(Non-automatic variables)
3) 多线程应用中被几个任务共享的变量

6、关键字const意味着“只读”

7、关键字__interrupt定义一个中断服务子程序(ISR)
1) ISR 不能返回一个值。
2) ISR 不能传递参数。
3) ISR 应该是短而有效率的,在ISR 中做浮点运算是不明智的。
4) printf()经常有重入和性能上的问题。

8、关键字Typedef声明一个已经存在的数据类型的同义字
比宏定义#define PS struct s *更好,因为
dPS p1,p2;扩展为struct s * p1, p2;
定义p1为一个指向结构的指,p2为一个实际的结构,这也许不是你想要的。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值