细数linux内核里那些偏门的C语言语法(四)(unsigned long)-MAX_ERRNO
来源:互联网 发布:期货 可用资金算法 编辑:程序博客网 时间:2024/06/05 22:49
这个语法应该很多人知道,看来还是我基础不好,所以才一时没看懂
同样是在跟内核代码码时发现
#define IS_ERR_VALUE(x) unlikely((x) >= (unsigned long)-MAX_ERRNO)
其中
#define MAX_ERRNO 4096
(unsigned long)减去MAX_ERRNO ? 这是什么鬼?
其实不是,真正的意思是 - MAX_ERRNO 然后强制转换为(unsigned long)类型
就是相当于(unsigned long)(-4095)
强转时,负数为正数的补码,补码为反码加1
以char 型为例子 1 的补码为 二进制11111110b
加1为 11111111b
十六进制为0xFF
那么-1转换为(unsigned long)类型为0xFFFFFFFF
以此类推
-4095 转换为(unsigned long)类型为0xFFFFF001
#define IS_ERR_VALUE(x) unlikely((x) >= (unsigned long)-MAX_ERRNO) 表示值大于等于0xFFFFF001 的指针判断为错误指针
linux内核里把 -MAX_ERRNO 到 -1作为指针的错误码
IS_ERR_VALUE(x) 就是检验指针是否合法
阅读全文
0 0
- 细数linux内核里那些偏门的C语言语法(四)(unsigned long)-MAX_ERRNO
- 细数linux内核里那些偏门的C语言语法(二)x... 与 #x
- 细数linux内核里那些偏门的C语言语法(三) !!(x)
- 细数linux内核里那些偏门的C语言语法(一)简化三目运算
- C语言中unsigned long long数据类型
- C语言 unsigned long转char*的意义
- *(volatile unsigned long *) 语法
- *(volatile unsigned long *) 语法
- 在C语言中,double、long、unsigned、int、char类型数据所占字节数
- 在C语言中,double、long、unsigned、int、char类型数据所占字节数
- 在C语言中,double、long、unsigned、int、char类型数据所占字节数
- 在C语言中,double、long、unsigned、int、char类型数据所占字节数
- 在C语言中,double、long、unsigned、int、char类型数据所占字节数
- 在C语言中,double、long、unsigned、int、char类型数据所占字节数
- 在C语言中,double、long、unsigned、int、char类型数据所占字节数
- 在C语言中,double、long、unsigned、int、char类型数据所占字节数
- 在C语言中,double、long、unsigned、int、char类型数据所占字节数
- 在C语言中,double、long、unsigned、int、char类型数据所占字节数
- WinDbg调试CPU占用高的问题 试验+实战 《第七篇》
- sort排序方法
- marvell 开发板Ubuntu镜像制作及配置步骤
- 【特征检测】BRISK特征提取算法
- js正则表达式之 (?=) (?!)
- 细数linux内核里那些偏门的C语言语法(四)(unsigned long)-MAX_ERRNO
- python学习知识体系梳理
- 解决maven update project 后项目jdk变成1.5的问题
- Microsoft Office 2016 Project Visio Pro Plus 64 32 下载
- C# Office 在线转PDF
- 期末复习嘎嘎嘎
- vue2.0 页面在华为自带浏览器里无法打开。
- 软件测试员如何提升自己
- 如何使用ProgressBar动态设置进度条渐变