开发中我们经常会遇到一些需要封装起来的简单函数
比如说:有两个数,通过调用一个宏去返回较大的数
或者:通过输入三原色(RGB)的值去输出一个自己的颜色
这中做法比较常用 下面就来说一下这种带参数的宏是怎么定义的
废话不多说 直接上代码:
// 这个宏是输出比较大的一个数
#define swap(a,b) ((a) > (b)? (a):(b))
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
@autoreleasepool {
// insert code here...
NSLog(@"Hello, World!");
int a,b;
a = 2;
b = 4;
NSLog(@"%d",swap(a, b));
}
return 0;
}
返回值为:
下面是返回颜色的宏
// 获取RGB颜色 ---- 注意颜色的名字 不能用 red green blue 这样会造成宏中的重名,导致编译报错
#define RGBA(r,g,b,a) [UIColor colorWithRed:r/255.0f green:g/255.0f blue:b/255.0f alpha:a]
#define RGB(r,g,b) RGBA(r,g,b,1.0f)
#import "ViewController.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// 分别设置背景颜色
self.view.backgroundColor = RGBA(32, 32, 230, 1);
self.view.backgroundColor = RGB(230, 23, 23);
}
@end
下面就是 最终设置的颜色 偏红色
关于这种宏的一个小结
这个测试是为下面的目的而设的:
1).标识#define在宏中应用的基本知识。这是很重要的,因为直到嵌入(inline)操作符变为标准C的一部分,宏是方便产生嵌入代码的唯一方法,
对于嵌入式系统来说,为了能达到要求的性能,嵌入代码经常是必须的方法。
2).三重条件操作符的知识。这个操作符存在C语言中的原因是它使得编译器能产生比if-then-else更优化的代码,了解这个用法是很重要的。
3). 懂得在宏中小心地把参数用括号括起来