连接符号:#、##

#是字符串连接符

##是两个变量的连接符

/// well.c
#ifndef __WELL_H__
#define __WELL_H__

#define check_cond(exp, err_ret) \
	do {\
		if (!(exp))\
		{\
			fprintf(stderr, "%s:%d:%s, not match condition:"#exp"\n",\
				__FILE__, __LINE__, __FUNCTION__);\
				return err_ret;\
		}\
	}while\(0);
	
#define PRINT_VALUE(n) printf("value"#n":%d\n", value##n);
int main()
{
	int value1 = 1;
	int value2 = 2;
	
	PRINT_VALUE(1);	//编译时宏展开成printf("value1=%d\n", value1);
	PRINT_VALUE(2); //编译时宏展开成printf("value2=%d\n", value2);
}
#endif


执行结果为:

value1=1

value2=2


注意:

#exp等效于"exp",#是字符串连接符

exp1##exp2等效于exp1exp2,##是将两个表达式连接起来成为一个表达式


#和##完全不是一个同等级功能的两者,不要混淆了。


可以通过查看well.c的编译后的文件,查看#和##编译后的内容:

$g++ -E ./well.c > preproc.cpp

$cat -n ./preproc.cpp | less 

截图得到#和##编译后的内容


从上面可以看出来

PRINT_VALUE(1);

被编译为上图中的963行

PRINT_VALUE(2);

被编译为上图中的964行


(END)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值