lms*_*lms 3 c objective-c c-preprocessor
您将如何编写可以采用1或0参数的可变参数宏.就是这样的:
GREET() // returns @"Hello World"
GREET(@"John") // returns @"Hello John"
Run Code Online (Sandbox Code Playgroud)
这很简单,你有这样的事情:
#define __NARGS(unused, _1, _2, _3, _4, _5, VAL, ...) VAL
#define NARGS(...) __NARGS(unused, ## __VA_ARGS__, 5, 4, 3, 2, 1, 0)
#define __GREET(ARGC, ARGS...) GREET_ ## ARGC (ARGS)
#define _GREET(ARGC, ARGS...) __GREET(ARGC, ARGS)
#define GREET(...) _GREET(NARGS(__VA_ARGS__), __VA_ARGS__)
#define GREET_0(...) @"Hello World!"
#define GREET_1(ARG, ...) @"Hello, " ARG // strings are auto-concatenated in objc
int main()
{
NSLog(@"%@", GREET());
NSLog(@"%@", GREET(@"John"));
}
Run Code Online (Sandbox Code Playgroud)
输出:
2012-09-30 11:56:48.478 TestProj[51823:303] Hello World! 2012-09-30 11:56:48.480 TestProj[51823:303] Hello, John
现在,这非常复杂,但假设您从基本层面了解预处理器的工作原理,您应该能够很好地理解正在发生的事情.
| 归档时间: |
|
| 查看次数: |
1048 次 |
| 最近记录: |