'#' 和 '##' 的作用

#cat pre.c

#include <stdio.h>
/*
 * 宏定义中,
 *# 宏函数参数字符串化
 *## 用来连接两个标识符
 * (通常其中一个标识符是宏函数的参数)为一个标识符
 **/
#define PRINT(x) printf(#x" = %d\n", x)
#define GENERATOR(type) \
			type max_##type(type a, type b)\
			{\
				return a > b ? a : b; \
			}

GENERATOR(int)
GENERATOR(double)
GENERATOR(char)

int main()
{
	int x = 100;
	printf("x = %d\n", x);
	int y = 200;
	printf("y = %d\n", y);
	printf("---------------\n");
	PRINT(x);
	PRINT(y);// ==> printf("y""=%d\n", y);
	printf("max_int(10, 20) = %d\n", max_int(10, 20));
	printf("max_double(10.3, 20.4) = %g\n", max_double(10.3, 20.4));
}


#gcc -E pre.c | tail -20

# 2 "pre.c" 2
# 15 "pre.c"
int max_int(int a, int b) { return a > b ? a : b; }
double max_double(double a, double b) { return a > b ? a : b; }
char max_char(char a, char b) { return a > b ? a : b; }

int main()
{
 int x = 100;
 printf("x = %d\n", x);
 int y = 200;
 printf("y = %d\n", y);
 printf("---------------\n");
 printf("x"" = %d\n", x);
 printf("y"" = %d\n", y);
 printf("max_int(10, 20) = %d\n", max_int(10, 20));
 printf("max_double(10.3, 20.4) = %g\n", max_double(10.3, 20.4));
}


 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值