达人秀第三季总决赛,丹东网站,揭晓兮
__FILE__ //所在文件 __LINE__ //所在行数
#define handle_error(msg) (do{perror(msg); \ exit(EXIT_FAILURE);}while(0))
解释:
perror:检查系统错误的宏.一旦发生了,系统错误就会产生一个错误数字(errno),对应相应的错误字符串。
EXIT_SUCCESS 和 EXIT_FAILURE:C 标准定义了两个值,可以作为exit()的参数,来分别指示是否为成功退出。
exit():传递给的是父进程,或者shell终端。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; //表达式作参数
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; }
如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复
如何在没有core文件的情况下用dmesg+addr2line定位段错误
用QT制作3D点云显示器——QtDataVisualization
网友评论