关于宏的小知识

# 的意思是紧跟着它的后面的标识符添加一个双引号""

@#的使用, 我们添加一个普通的宏:加@#是怎么使用的:

//随便写一个宏

#define LRToast(str) [NSString stringWithFormat:@"%@",@#str]

//这个宏需要这样写LRToast(温馨提示);//正常运行, 打印不会报错NSLog(@"%@",LRToast(温馨提示));



关于宏定义中的#

1.在一个参数前加一个#,预处理时将会变成这个参数名的字符串常量,即字符串化(stringify)例如:

#define GET_NAME(X) #X

int a = 0;

NSLog(@"%s",GET_NAME(a));      //output: "a"

NSLog(@"%s",GET_NAME(a+3));    //output: "a+3"

2.

#在宏定义中的另一个作用就是用于命名的串联,用##就可以串联它左右两边的命名,比如以下代码:

#define CONCAT(X, Y) X ## Y

NSString *helloworld = @"Hello, world!";

NSLog(@"%@",CONCAT(hello, world)); //output: "Hello, world"

3.

可选可变参数

##在宏定义中可以放在__VA_ARGS__之前表示可变参数可以为空,否则的话可变参数至少为一个了。

#define MYLOG(format, ...) NSLog(format, ##__VA_ARGS__)

MYLOG(@"Don't make an error!");

上面代码中MLOG中只有一个参数,如果不加##,则MLOG至少需要两个参数,在Xcode里将会出现编译错误。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容