C语言宏定义制作函数模板

一、介绍
当做协议栈或者批量化函数的时候,内容框架是固定的,如果要写1000个10000个函数确实手敲比较麻烦,一种是用工具批量产生这些函数,另一种就是宏定义,这里给出宏定义解决的方法,利用宏定义制作函数模板

二、原理
1、宏定义中##是一种分隔连接方式,它的作用是先分隔,然后进行强制连接
例如:#define hello(x) hello##x
hello(123) 等效 hello123
#define A1(name, type) type name_##type##type 或
#define A2(name, type) type name##
##type##type
A1(a1, int); 等效 int name_int_type;
A2(a1, int); 等效 int a1_int_type;
第一个宏定义中,“name"和第一个”“之间,以及第2个”"和第二个"type"之间没有被分隔,所以预处理器会把name
##type##type解释成3段:
“name
”、“type”、以及“type”,这中间只有“type”是在宏前面出现过的,所以它可以被宏替换。
第二个宏定义中,“name”和第一个“
”之间也被分隔了,所以
预处理器会把name##_##type##type解释成4段:“name”、“”、“type”以及“_type”,这其间,就有两个可以被宏替换了。

另外 ##连接的时候会去掉所有的空格

2、宏定义中#是“字符串化”的意思。出现在宏定义中的#是把跟在后面的参数转换成一个字符串
例如:#define M(x) printf(“result = %s”,#x)
M(1) 等效为 printf(“result = %s”,“1”)

三、示例

#include <stdio.h>

#define create_port(name,content) test##name()\
{printf("hello test1 %s\n", #content);}\
test2##name()\
{printf("hello test2 %s\n", #content);}


create_port(1, guoguo)

int main()
{
	test1();
	test21();
	return 0;
} 

结果
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值