c语言之带参数的宏定义
发布时间:2020-12-16 09:07:07 所属栏目:百科 来源:网络整理
导读:1.带参数的宏定义中,宏名和新参表之间不能有空格, 2.在带参数的宏定义中,形参参数不分配内存单元,因此不必作类型定义。而宏调用中的实参有具体值,要用它去代换形参,因此必须作类型说明。 #includestdio.h #include iostream #define MAX(a,b) (ab)?a:b
1.带参数的宏定义中,宏名和新参表之间不能有空格, 2.在带参数的宏定义中,形参参数不分配内存单元,因此不必作类型定义。而宏调用中的实参有具体值,要用它去代换形参,因此必须作类型说明。 #include<stdio.h> #include<iostream> #define MAX(a,b) (a>b)?a:b int main() { x,y,max; x = 2; y = 3; max = MAX(x,y); printf("%dn",max); system(pause); return 0; } 3.在宏定义中的形参是标识符,而宏调用中实参可以是表达式。 4.在宏定义中,字符串内的形参通常要用括号括起来以避免出错。 5.带参的宏和代餐函数类似,但本质不同,除此之外,把同一表达式用函数处理和用宏处理两者的结果有可能不同。 普通函数: #include<stdio.h> #include<iostream> int SQ( y) { return ((y) * (y)); } int i = 1; y); while (i <= 5) { printf(%d ",SQ(i++)); } printf(n); system(; } 输出: ? 宏定义: #include<stdio.h>#define SQ(y) (y)*(y) ; } 输出: ? 为什么结果不同呢?这是因为普通函数调用时,实参传给形参的是值,而在宏定义时,要用表达式进行替换,即(i++)*(i++),所以I++会被执行两次。 6.宏定义也可以用来定义多个语句,在宏调用时,把这些语句又代换到源程序内。 #include<stdio.h>#define STR(s1,s2,s3,s4) strcat(strcat(strcat(s4,s3),s2),s1) char str4[] = ni char str3[] = hao char str2[] = a char str1[] = !!! ; printf(%sn; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |