1 编译预处理及位运算.pptVIP

  • 6
  • 0
  • 约1.56万字
  • 约 64页
  • 2017-06-03 发布于湖北
  • 举报
1.6.1位域的定义和位域变量的说明 位域的使用要点 位域可以无位域名,这时它只用来作填充或调整位置。 struct k { int a:1 int :2 /*该2位不能使用*/ int b:3 int c:2 }; 1.6.2 位域的使用 若某个位段要从新的存储单元开始,可以这样定义: 注意:长度为0的位段的作用是使下一个位段的内容从新的存储单元开始存放。 要点:注意每个字段的最大取值范围.如:data.a的取值只能是:0~3, 因为两位二进制最大表示的数为3. 方法:通过结构体成员来应用: 如: data.a=2; data.b=6; struct pack { unsigned a:2; unsigned :0; unsigned b:4; unsigned c:4; int x; }data; 1.6.2 位域的使用 位域的使用要点 位段可以用十进制的整型形式输出,也可以用其他的整型格式输出(如八进制,十六进制和无符号),位段以整型的形式参加算术运算. 分析下面的程序: main() { struct pack { unsigned a:2; unsigned b:3; unsigned c:1; unsigned d:4; unsigned e:3; }; union{struct pack qp; unsigned i;}abc; abc.i=255; printf(“%d\n”,abc.qp.d); } 1.6.2 位域的使用 位域的使用例子 main() { struct bs { unsigned a:1; unsigned b:3; unsigned c:4; } bit,*pbit; bit.a=1; bit.b=7; bit.c=15; printf(%d,%d,%d\n,bit.a,bit.b,bit.c); pbit=bit; pbit-a=0; pbit-b=3; pbit-c|=1; printf(%d,%d,%d\n,pbit-a,pbit-b,pbit-c); } 1.7 其他预处理关键字 #error 使用defined #line #pragma ?#和## 预定义宏 1.7.1 #error #error指令强制编译程序停止编译, 主要用于程序调试 #error指令的一般形式是 #error error-message 注意: 宏串error-message不用双引号包围 ?可以自定义错误内容 1.7.2 使用defined 确定是否定义宏名字的方法 defined操作符的一般形式如 defined macro-name define与#ifdef: #if defined MY 或 #ifdef MY 感叹号”!”来反转相应的条件 ?#if !defined DEBUG ? Printf(“Final Version!\n”); #endif 1.7.3 #line #line指令改变__LINE__和__FILE__的内容 #line的一般形式 #line number “filename” 主要用于调试和特殊应用 1.7.5 #和## 操作符#通常称为字符串化的操作符 预处理程序把以下的语句: Printf(mkstr(I like C)); 变成 Printf(“I like C”); #include stdio.h #define mkstr(s) #s int main(void) { ? Printf(mkstr(I like C));? ? Return 0; } 1.7.5 #和## “##”可以把两个独立的字符串连接成一个字符串 #includestdio.h #define SORT(X) sort_function # # X void main(void) { char *array; int elements,element_size;.

文档评论(0)

1亿VIP精品文档

相关文档