iOS 7:漫谈#define 宏定义
- //This defines PI
- #define M_PI 3.14159265358979323846264338327950288
- #define M_PI 3.14159265358979323846264338327950288
- double r = 10.0;
- double circlePerimeter = 2 * M_PI * r;
- // => double circlePerimeter = 2 * 3.14159265358979323846264338327950288 * r;
- printf("Pi is %0.7f",M_PI);
- //Pi is 3.1415927
- //A simple function-like macro
- #define SELF(x) x
- NSString *name = @"Macro Rookie";
- NSLog(@"Hello %@",SELF(name));
- // => NSLog(@"Hello %@",name);
- // => Hello Macro Rookie
- #define PLUS(x,y) x + y
- printf("%d",PLUS(3,2));
- // => printf("%d",3 + 2);
- // => 5
- //Version 1.0
- #define MIN(A,B) A < B ? A : B
- int a = MIN(1,2);
- // => int a = 1 < 2 ? 1 : 2;
- printf("%d",a);
- // => 1
- int a = 2 * MIN(3, 4);
- printf("%d",a);
- // => 4
- int a = 2 * MIN(3, 4);
- // => int a = 2 * 3 < 4 ? 3 : 4;
- // => int a = 6 < 4 ? 3 : 4;
- // => int a = 4;
- //Version 2.0
- #define MIN(A,B) (A < B ? A : B)
- int a = MIN(3, 4 < 5 ? 4 : 5);
- printf("%d",a);
- // => 4
- int a = MIN(3, 4 < 5 ? 4 : 5);
- // => int a = (3 < 4 < 5 ? 4 : 5 ? 3 : 4 < 5 ? 4 : 5); //希望你还记得运算符优先级
- // => int a = ((3 < (4 < 5 ? 4 : 5) ? 3 : 4) < 5 ? 4 : 5); //为了您不太纠结,我给这个式子加上了括号
- // => int a = ((3 < 4 ? 3 : 4) < 5 ? 4 : 5)
- // => int a = (3 < 5 ? 4 : 5)
- // => int a = 4
- //Version 3.0
- #define MIN(A,B) ((A) < (B) ? (A) : (B))
- float a = 1.0f;
- float b = MIN(a++, 1.5f);
- printf("a=%f, b=%f",a,b);
- // => a=3.000000, b=2.000000
- float a = 1.0f;
- float b = MIN(a++, 1.5f);
- // => float b = ((a++) < (1.5f) ? (a++) : (1.5f))
- int a = ({
- int b = 1;
- int c = 2;
- b + c;
- });
- // => a is 3
- //GNUC MIN
- #define MIN(A,B) ({ __typeof__(A) __a = (A); __typeof__(B) __b = (B); __a < __b ? __a : __b; })
- //CLANG MIN
- #define __NSX_PASTE__(A,B) A##B
- #define MIN(A,B) __NSMIN_IMPL__(A,B,__COUNTER__)
- #define __NSMIN_IMPL__(A,B,L) ({ __typeof__(A) __NSX_PASTE__(__a,L) = (A); __typeof__(B) __NSX_PASTE__(__b,L) = (B); (__NSX_PASTE__(__a,L) < __NSX_PASTE__(__b,L)) ? __NSX_PASTE__(__a,L) : __NSX_PASTE__(__b,L); })
- #define __NSX_PASTE__(A,B) A##B
- #define MIN(A,B) __NSMIN_IMPL__(A,B,__COUNTER__)
- #define __NSMIN_IMPL__(A,B,L) ({ __typeof__(A) __NSX_PASTE__(__a,L) = (A); \
- __typeof__(B) __NSX_PASTE__(__b,L) = (B); \
- (__NSX_PASTE__(__a,L) < __NSX_PASTE__(__b,L)) ? __NSX_PASTE__(__a,L) : __NSX_PASTE__(__b,L); \
- })
iOS 7:漫谈#define 宏定义的更多相关文章
- iOS 7:漫谈#define 宏定义(转)
iOS :漫谈#define 宏定义 #define宏定义在C系开发中可以说占有举足轻重的作用.底层框架自不必说,为了编译优化和方便,以及跨平台能力,宏被大量使用,可以说底层开发离开define将寸步 ...
- iOS define 宏定义 和 const定义常量区别
const const 是c++中的修饰符. c++中常用来定义常量,修饰左值. #define 宏定义语句, 在预处理阶段直接做文本替换,不做类型检查. 它们之间的最大区别: 1. 对于co ...
- iOS开发经常使用宏定义
iOS开发经常使用宏定义 iOS开发中经常须要获取屏幕宽度高度,为view设置颜色,为imgagView设置图片等,我们都可定义一些宏,随时都可拿来使用,方便开发 <span style=&qu ...
- 面试问题5:const 与 define 宏定义之间的区别
问题描述:const 与 define 宏定义之间的区别 (1) 编译器处理方式不同 define宏是在预处理阶段展开: const常量是编译运行阶段使用: (2) 类型和安全检查不同 ...
- define宏定义中的#,##,@#及\符号
define宏定义中的#,##,@#及\符号 在#define中,标准只定义了#和##两种操作.#用来把参数转换成字符串,##则用来连接两个前后两个参数,把它们变成一个字符串. 1.# (string ...
- iOS开发常见的宏定义(实用)
iOS开发过程中使用一些常用的宏可以提高开发效率,提高代码的重用性:将这些宏放到一个头文件里然后再放到工程中的-Prefix.pch文件中(或者直接放到-Prefix.pch中)直接可以使用,灰常方便 ...
- #define宏定义形式的"函数"导致的bug
定义了一个宏定义形式的"函数": #define SUM8(YY)\ {\ int Y = YY>>2;\ ...\ } 然后使用的时候,传入了一个同名的变量Y: i ...
- define宏定义和const常变量区别
1.define是宏定义,程序在预处理阶段将用define定义的内容进行了替换.因此程序运行时,常量表中并没有用define定义的常量,系统不为它分配内存.const定义的常量,在程序运行时在常量表中 ...
- typedef 类型重命名 和 #define 宏定义(1)
http://www.blogjava.net/jasmine214--love/archive/2010/11/29/339307.html 在现实生活中,信息的概念可能是长度,数量和面积等.在C语 ...
随机推荐
- Connection Phase Packets
Connection Phase Packets https://dev.mysql.com/doc/internals/en/connection-phase-packets.html#packet ...
- Page (computer memory)
A page, memory page, or virtual page is a fixed-length contiguous block of virtual memory, described ...
- 浏览器访问配置完成的ftp服务器
在浏览器的地址栏输入: ftp://testuser:testuser@192.168.10.4 testuser 是ftp的用户名和密码: 192.168.10.4 是ftp服务器的IP地址. 亲测 ...
- POJ 1088 滑雪 ( DFS+动态规划思想 )
滑雪 Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 79519 Accepted: 29581 Description ...
- Hihocoder #1095 : HIHO Drinking Game (微软苏州校招笔试)( *【二分搜索最优解】)
#1095 : HIHO Drinking Game 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 Little Hi and Little Ho are playin ...
- Eclipse jar打包详解
通过Eclipse下的演示工程,介绍如何打包这样的项目:要导出的类里边用到了别的jar包. 方法/步骤 1. Eclipse下的演示工程结构如下图所示,其中Task.java是当前工程运行的M ...
- MYSQL进阶学习笔记十七:MySQL定期维护!(视频序号:进阶_36)
知识点十八:MySQL定期维护(37) 一.Mysql的定时器 所谓的定时器,指的是在某个时间段去执行同样的代码.比如闹钟.每到指定的时间闹铃就会响.同样的,我们这个定时器,只要满足我们的一个定时条件 ...
- RAC环境下oracle实例启动问题:ora-01565,ora-17503
今天有现场因为突然听电,数据库服务器停了,需要我远程重启一下. 现场是RAC环境,oracle10.2.0.4. 登录后,startup,报错如下 根据报错,初步判断是共享数据文 ...
- 「LuoguP2420」 让我们异或吧(树上前缀和
P2420 让我们异或吧-洛谷 题目描述 异或是一种神奇的运算,大部分人把它总结成不进位加法. 在生活中…xor运算也很常见.比如,对于一个问题的回答,是为1,否为0.那么: (A是否是男生 )xor ...
- map插入与查找
用map构建映射关系可以用来离散化,这里记录一下用法: 插入:将要插入的两个值组成pair,用insert插入map中: 查找:定义iterator,赋成find返回的迭代器,如果没有找到则=mp.e ...