分为对象宏和函数宏,本文主要针对对象宏。
宏定义中的定义了两种操作:#和##,#k的作用是把k转化成字符串,##用来连接两个参数并转化成一个字符串。当宏定义里面有#或者##的时候宏参数不再被展开。
宏函数和普通函数比较:
宏直接字符串替换(不占内存),函数要传参(占内存),有数据类型检查;
宏在编译前进行,函数在编译后进行;
宏不需要堆栈;
宏生成的目标文件大;
宏降低代码执行效率;
那么问题来了,怎么在恰当的场景下对宏函数和普通函数做取舍呢?
分为对象宏和函数宏,本文主要针对对象宏。
宏定义中的定义了两种操作:#和##,#k的作用是把k转化成字符串,##用来连接两个参数并转化成一个字符串。当宏定义里面有#或者##的时候宏参数不再被展开。
宏函数和普通函数比较:
宏直接字符串替换(不占内存),函数要传参(占内存),有数据类型检查;
宏在编译前进行,函数在编译后进行;
宏不需要堆栈;
宏生成的目标文件大;
宏降低代码执行效率;
那么问题来了,怎么在恰当的场景下对宏函数和普通函数做取舍呢?