利用宏定义隐藏函数声明:主要是针对预编译中 "##" 的使用
问题背景:
想要实现类似面向对象语言中关于多态的能力,例如:取两个数字的较大者
分析问题:
数值类比较一般是整数和浮点数,因此一般实现无非声明两类函数进行实现
解决问题:
利用宏定义中的字符串替换,减少重复实现的代码
#define GENERATE_MAX(type) \
type type##_max(type x, type y) \
{return x > y ? x : y;}
GENERATE_MAX(float)
GENERATE_MAX(int)
int main(){
float t1, x1=1.0f, y1=2.0f;
int t, x=1, y=2;
t1 = float_max(x1,y1);
t = int_max(x,y);
printf("t=%d,t1=%.2f\n",t,t1);
return 0;
}
小结:
针对不同类型的数值比较,在实现过程一致的情况下,可以采用通类思路,可以减少不必要的重复劳动。