(void) (&_x == &_y)的作用】的更多相关文章

如果有下面这段代码: #define min(x, y) ({ \ const typeof(x) _x = (x); \ const typeof(y) _y = (y); \ (void) (&_x == &_y); \ _x < _y ? _x : _y; }) int x = 2; char y = 3; int m; m = min(x, y); 编译的时候,经过预处理后,就会有这样的判断操作: int * == char *; 因此编译器就会提示: warning: co…
linux下的c编程 Linux 系统上可用的 C 编译器是 GNU C 编译器, 它建立在自由软件基金会的编程许可证的基础上,因此可以自由发布.GNU  C 对标准 C 进行一系列扩展,以增强标准 C 的功能. 1.零长度数组 GNUC 允许使用零长度数组,在定义变长对象的头结构时,这个特性非常有用. 例如: struct var_data { int len; char data[0]; }; char data[0]仅仅意味着程序中通过 var_data 结构体实例的 data[index…
Linux内核理论基础 组成Linux内核的5个子系统:进程调度(SCHED)/内存管理(MM)/虚拟文件系统(VFS)/网络接口(NET)/进程间通信(IPC). 进程调度(SCHED) 在设备驱动编程中,当请求的资源不能得到满足时,驱动一般会调度其他进程执行,并使本进程进入睡眠状态,直到它请求的资源被释放,才会被唤醒而进入就绪态.睡眠分成可被打断的睡眠和不可被打断的睡眠,两者的区别在于可被打断的睡眠在收到信号的时候会醒. 内存管理(MM) 内存管理的主要作用是控制多个进程安全地共享主内存区域…
1. 语句表达式 GNU C 把包含在括号中的复合语句看做是一个表达式,称作语句表达式,它可以出现在任何允许表达式的地方.我们可以在语句表达式中使用原本只能在复合语句中使用的循环.局部变量等,例如: #define min_t(type, x, y) \ ({ type _x = (x); type _y = (y); _x < _y ? _x : _y; }) int ia, ib, mini; float fa, fb, minf; mini = min_t(int, ia, ib); mi…
转载自点击打开链接 GNU计划,又称革奴计划,是由Richard Stallman在1983年9月27日公开发起的.它的目标是创建一套完全自由的操作系统.它在编写linux的时候自己制作了一个标准成为 GNU C标准.ANSI 美国国家标准协会,它对C做的标准ANSI C标准后来被国际标准协会接收成为 标准C 所以 ANSI C 和标准C是一个概念 总体来说现在linux也支持标准C,以后标准C可以跨平台,而GUN c 一般只在linux c下应用 18.1 ANSI C和标准C++的差别 这里…
Linux 系统上可用的C编译器是GNU C编译器,它建立在自由软件基金会的编程许可证的基础上,因此可以自由发布.GNU C对标准C 进行一系列扩展,以增强标准C的功能. 1.零长度数组GNU C 允许使用零长度数组,多用在定义变长对象的头结构.例如: struct var_data { int len; ]; }; char data[0] 仅仅意味着程序中通过 var_data 结构体实例的 data[index] 成员可以访问 len 之后的第 index 个地址,它并没有为 data[]…
linux内核中GNU C和标准C的区别 今天看了一下午的linux内核编程方面的内容,发现linux 内核中GNU C与标准C有一些差别,特记录如下: linux 系统上可用的C编译器是GNU C编译器,它建立在自由软件基金会的编程许可证的基础上,因此可以自由发布.GNU C对标准C进行进一步扩展,以增强标准C的功能.下面我们对GNU C中的扩展进行一下总结: 1.零长度数组 GNU C 允许使用零长度数组,在定义变长对象的头结构时,这个特性非常有用.例如: struct minix_dir_…
#define max(x,y) ({ \ typeof(x) _x = (x);    \ typeof(y) _y = (y);    \ (void) (&_x == &_y);    \ _x > _y ? _x : _y; }) typeof(x)的意思是取x的类型,这不是标准C里的,gcc支持,vc不支持 (void) (&_x == &_y);这句话本身从运行程序来讲全然是一句废话.它的作用在于,本身我们无法做这种操作typeof(_x)==typeof…
gcc核心扩展linuxforum(转)=========================== Linux 内核使用的 GNU C 扩展 =========================== GNC CC 是一个功能非常强大的跨平台 C 编译器,它对 C 语言提供了很多扩展, 这些扩展对优化.目标代码布局.更安全的检查等方面提供了很强的支持.本文把 支持 GNU 扩展的 C 语言称为 GNU C. Linux 内核代码使用了大量的 GNU C 扩展,以至于能够编译 Linux 内核的唯一编 译…
http://my.oschina.net/senmole/blog?catalog=153878 Linux Kernel的代码,上次就发现一个结构体的定义形式看不懂,后来才知道它用的不是标准的ANSI C,而是GCC的一些扩展.刚好看到<Linux内核修炼之道>中对GCC扩展有所描述,转载一下吧,对看kernel代码有所帮助. .5内核代码的特点 Linux内核同时使用C语言和汇编语言实现,C语言编写的代码移植性较好.易于维护,而汇编语言编写的代码相当于针对特定的平台做了优化,速度较快,所…