十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
直接调用即可。如下示例:
成都创新互联公司成立于2013年,我们提供高端成都网站建设、成都网站制作、成都网站设计、网站定制、全网整合营销推广、小程序制作、微信公众号开发、成都网站营销服务,提供专业营销思路、内容策划、视觉设计、程序开发来完成项目落地,为成都混凝土泵车企业提供源源不断的流量和订单咨询。
#includestdio.h#define sum(b,c){int d=0;d=b+c;printf("两者的和:%d\n",d);}int main(){ int x=0,y=0; scanf("%d%d",x,y); sum (x,y); return 0;}使用宏函数或者宏函数时,注意如下几点:
(1)宏函数的参数没有类型,预处理器只负责做形式上的替换,而不做参数类型检查,所以传参时要格外小心。
(2)宏函数定义要注意格式,尤其是括号。
如果上面的宏函数写成 #define MAX(a, b) (ab?a:b),省去内层括号,则宏展开就成了k = (i0x0fj0x0f?i0x0f:j0x0f),运算的优先级就错了。同样道理,这个宏定义的外层括号也是不能省的。若函数中是宏替换为 ++MAX(a,b),则宏展开就成了 ++(a)(b)?(a):(b),运算优先级也是错了。
(3)宏函数往往会导致较低的代码执行效率。
int a[]={9,3,5,2,1,0,8,7,6,4};int max(n){return n==0?a[0]:MAX(a[n],max(n-1));}int main(){max(9);return 0;}若是普通函数,则通过递归,可取的最大值,时间复杂度为O(n)。但若是宏函数,则宏展开为( a[n]max(n-1)?a[n]:max(n-1) ),其中max(n-1)被调用了两遍,这样依此递归下去,时间复杂度会很高。
需要借用C语言的VA_LIST 宏定义,及相关操作来实现可变参数。VA_LIST 所在头文件:#include stdarg.h,用法如下:(1)首先在函数里定义一具VA_LIST型的变量,这个变量是指向参数的指针;(2)然后用VA_START宏初始化刚定义的VA_LIST变量;(3)然后用VA_ARG返回可变的参数,VA_ARG的第二个参数是你要返回的参数的类型(如果函数有多个可变参数的,依次调用VA_ARG获取各个参数);(4)最后用VA_END宏结束可变参数的获取。以下是一个自定义打印接口的实现:pre t="code" l="cpp"int my_printf(const char *fmt, )//表示参数可变
{
va_list args;//定义va_list
static char gc_PrintfOutBuff[1000];
va_start(args, fmt);//初始化
vsnprintf((char *) gc_PrintfOutBuff, 1000, (char *) fmt, args);//这里没有使用VA_ARG取回单个变量,而是借用vsnprinf一次性读取。
va_end(args);//结束获取
puts("%s",(const char *)gc_PrintfOutBuff);//使用。
return 0;
}
宏定义写在函数内部主要是为了方便,宏定义是预处理的,并没什么坏处