宏定义中的#与##操作符

字符串化操作符#

作用:在目标宏参数的左右各加上一个双引号,从而将宏参数转为字符串,如:

  1. #define test(num) NSLog(@"%@", @"test"#num)
  2. - (void)viewDidLoad {
  3. [super viewDidLoad];
  4. test(10); // 输出结果:test10
  5. }

注意:

  • 只有宏参数能够被#转换为字符串
  • #只在宏定义中有效




连接符##

作用:将两个相邻的标记(token)连接为一个单独的标记,如:

  1. #define customVar(varName, varValue) id cs_##varName = varValue
  2. - (void)viewDidLoad {
  3. [super viewDidLoad];
  4. customVar(test, @"test");
  5. NSLog(@"%@", cs_test); // 输出结果:test
  6. }

注意:

  • ##必须位于宏定义中才有效
  • ##连接的对象只要是token就行