设为首页 加入收藏

TOP

C语言基础(六)(检测程序错误宏)(枚举)
2017-12-29 06:06:30 】 浏览:309
Tags:语言基础 检测 程序 错误 枚举

一、检测程序错误的宏

1、系统自带的宏

__FILE__ //所在文件 
__LINE__ //所在行数

2、需要自己定义的宏

#define handle_error(msg) (do{perror(msg);   \ exit(EXIT_FAILURE);}while(0)) 

解释:

perror:检查系统错误的宏.一旦发生了,系统错误就会产生一个错误数字(errno),对应相应的错误字符串。

EXIT_SUCCESS 和 EXIT_FAILURE:C 标准定义了两个值,可以作为exit()的参数,来分别指示是否为成功退出。

exit():传递给的是父进程,或者shell终端。

3、linux内核里的两个宏:在驱动应用中很广泛

off_set_of(type, member)计算结构体内元素的偏移量。

将0转换为结构体类型的指针,再指向其成员,将地址转换为数值接收即为偏移量

#define off_set_of(type, member)    ((long)&((type*)0->member))

containe_of(ptr, type, member)结构体的首地址,需传入该结构体的成员地址。

将0转换为结构体类型指针,再指向其成员,调用typeof函数得到成员类型并申请一个该类型的指针,赋值为传入的成员地址str;该地址减去偏移量即结构体的首地址

#define container_of(ptr, type, member) \
({typeof ((type*)0->member) *mystr = ptr ; \
(type *)((long)mystr-off_set_of(type,member));})
typeof(),得到参数的类型。参数可以是变量名或者表达式。
int *p, a;
typeof(p) p_a = &a;  //变量名作参数
typeof(*p_a) b = 23; //表达式作参数

二、枚举

枚举:在实际应用中,有的变量只有几种可能取值。如人的性别只有两种可能取值,星期只有七种可能取值。在 C 语言中对这样取值比较特殊的变量可以定义为枚举类型。所谓枚举是指将变量的值一一列举出来,变量只限于列举出来的值的范围内取值。 枚举元素不是变量,而是常数,因此枚举元素又称为枚举常量。因为是常量,所以不能对枚举元素进行赋值。 枚举元素作为常量,它们是有值的,C 语言在编译时按定义的顺序使它们的值为从零开始,逐个加一。 枚举元素可以被赋值,第n个元素被赋值为q后,第n+1个元素的值为q+1,以此类推(枚举元素的值一般不重复,但可以重复)。 一个整数不能直接赋给一个枚举变量,必须强制进行类型转换才能赋值。
例如: a = (enum A)3 // 即a = S4 枚举元素一般都为大写。 定义:
enum A
{
        S1,
        S2,
        S3,
        S4,
};
利用枚举,编程实现密码锁功能
#include 
   
     typedef enum { S1, S2, S3, S4, }S; void main(void) { S a = S1;//声明一个变量的格式,以枚举值赋值 int num=0; while(1) { scanf("%d", &num); switch(a) { case S1: if(num == 4) a = S2; else a = S1; break; case S2: if(num == 2) a = S3; else a = S1; break; case S3: if(num == 9) a = S4; else a = S1; break; } if(a == S4) { printf("开了\n"); return; } } return; }
   
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇PAT训练:1006. 换个格式输出整数 下一篇C语言基础之结构体讲解

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目