__builtin_choose_expr
type __builtin_choose_expr (const_exp, exp1, exp2)
这个函数的第一个参数必须是常量表达式,因为之前我已经说过,它属于编译时行为,而非运行时行为,跟sizeof和typeof一样。这个函数是一个谓词函数,如果const_expr的结果非0,那么生成exp1,且返回类型type也与exp1表达式的类型一致;否则生成exp2,并且返回类型type也与exp2的类型一致。由于是编译时行为,因此exp1与exp2表达式所产生的目标代码是互斥的,生成了exp1就不会存在exp2。
实例:
#define __TYPE_IS_LL(t) (__same_type((t)0, 0LL) || __same_type((t)0, 0ULL))
# define __same_type(a, b) __builtin_types_compatible_p(typeof(a), typeof(b))__builtin_choose_expr(__TYPE_IS_LL(t), 0LL, 0L)
__builtin_types_compatible_p(typeof(a), typeof(b))是比较两个类型是否相同。
所以__builtin_choose_expr(__TYPE_IS_LL(t), 0LL, 0L)等价于t为0LL或0ULL时,等于LL类型,否则为0L类型。当然这句话在32位系统上比较有意义,因为64位系统L和LL都为8个字节。
__builtin_choose_expr相关推荐
- C语言__builtin_choose_expr实现函数重载
__builtin_choose_expr是编译阶段的行为,不是运行时的行为. #include <stdlib.h> #include <stdio.h>void show_ ...
- linux系统调用(syscall)原理
引言:分析Android源码的过程中,要想从上至下完全明白一行代码,往往涉及app.framework.native一直到kernel,可能迷失到代码世界,明白了系统调用原理,或许能帮你峰回路转,找到 ...
- Linux内核中max()宏的奥妙何在?(二)——大神Linus对这个宏怎么看?
最新max()宏 上回,我们在<Linux内核中max()宏的奥妙何在?(一)>一文中说到,在3.18.34版Linux内核源码中的max()宏,采用了GCC的扩展特性,可以避免一些错误. ...
- 我们应该搞清楚分支预测
分支预测的英文名字是「Branch Prediction」 大家可以在Google上搜索这个关键字,可以看到关于分支预测的很多内容,不过要搞清楚分支预测如何工作的,才是问题的关键. 分支预测对程序的影 ...
- Linux kernel中常见的宏整理
0x00 宏的基本知识 // object-like #define 宏名 替换列表 换行符 //function-like #define 宏名 ([标识符列表]) 替换列表 换行符 替换列表和标识 ...
- Linux系统调用(syscall)原理(转)
引言:分析Android源码的过程中,要想从上至下完全明白一行代码,往往涉及app.framework.native一直到kernel,可能迷失到代码世界,明白了系统调用原理,或许能帮你峰回路转,找到 ...
- c语言中用括号将花括号括起来给变量赋值
#define max(x,y) ({ \ typeof(x) _x = (x); \ typeof(y) _y = (y); \ (void) (&_x == &am ...
- Linux系统调用(syscall)原理(转载)
转载链接: http://gityuan.com/2016/05/21/syscall/ 先来个整体介绍: 系统调用工作原理: 一般情况下,用户进程是不能访问内核的.它既不能访问内核所在的内存空间,也 ...
- linux(07)之内核系统调用
Linux(07)之内核系统调用 Author:Once Day Date:2023年1月7日 漫漫长路,才刚刚开始- 文章目录 Linux(07)之内核系统调用 1.概述 2. 系统调用 2.1 无 ...
最新文章
- 微信公众号管理系统 RhaPHP1.2.5更新啦!
- SSM整合(基础框架)代码
- VTK:图片之ImageSobel2D
- Omap3530 的GPIO中断设置
- ikbc机械键盘打字出现重复_超小无线机械键盘,绝佳移动打字体验
- 1数组中重复的数字-面试题目3
- arcengine遍历属性表_Redis源码解析四--跳跃表
- vue 路由懒加载,组件异步加载
- php 爬数据库,php爬虫爬取数据并存储至数据库
- 【转】:TCP/IP详解学习笔记(4)-ICMP协议,ping和Traceroute
- 【PAT】1009. 说反话 (20)
- cc2530dma控制器功能_CC2530芯片DMA控制器配置
- 电力系统的常用仿真模块MATLAB/SIMULINK(1)
- CSS(三)盒子模型
- 高级设计总监的设计方法论——5W1H需求分析法 KANO模型分析法
- photoshop教程裁剪和拉直照片以改善构图
- vmware linux top si高以及网卡队列、软负载相关优化
- Xavier NX+KU040图像处理卡
- 【数据分析与挖掘】数据分析学习及实践记录 | part 03-matplotlib常用统计图
- 论文研读 Rotated Test Problems for Assessing the Performance of MOEAs