18、C语言中预处理及位段

来源:互联网 发布:mac在美国多少钱一支 编辑:程序博客网 时间:2024/04/30 13:58

预处理

预处理指令并不是真正的C语言,只是嵌入到C语言中的一种处理方式,所以也无须加

分号;

总共有三种类型的预处理指令:宏定义、文件包含、条件编译

一、宏定义

1、不带参数的宏定义

#define 标识符 字符串

如:#define  PI  3.1415926

2、带参数的宏定义

#define 标识符(参数表) 字符串

如:#define s(a,b) a*b

二、文件包含

将一个源文件的内容完全复制(包含)进来,并插入到当前位置。

#include <  >标准形式,只到库函数文件所在的目录中寻找

#include  “”先在用户当前目录查找,再按标准形式查找

三、条件编译

当条件满足时编译,不满足时,则编译另一组语句

三种方式

1、

#ifdef  标识符  //如果宏定义了

程序段1;

#else

程序段2

#endif

2、

#ifndef  标识符   //如果没有宏定义

#else

#endif

3、

#if 表达式  //如果表达式为1

#else

#endif

二、位运算以及位段

1、运算符

&按位与 ~按位取反

|  按位或 ^ 按位异或

<<  左移 >> 右移

只有~是单目运算符。

有&=  |=  >>=   <<=   ^=

注意:参加位运算的对象只能是整型或字符型的数据 。

2、位段

C语言中允许在一个结构体中以位单位来指定其成员所占内存位数

这样的成员称为位段

如:

struct packed_data

{

unsigned a:2;

unsigned b:4;

unsigned :0;//表示本存储单元不再存储数据

unsigned :2;//表示这两位不可用

};

声明方法:

类型  [成员名] :位宽;

注意:如果本存储单元的余下的位数小于所申请的位宽,那么

直接转到下一个存储单元中存储。

一个位段位数不可以大于一个存储单元的总位数。

位段组至少占用一个存储单元,多余舍弃不用。

一个位段不可以跨多个存储单元

可定义无名位段,表示不可用

位段中的位数,可以按整型数处理


原创粉丝点击