C语言中带参宏定义

来源:互联网 发布:网卡mac ip绑定 编辑:程序博客网 时间:2024/06/06 10:43
#include<stdio.h> /*1.带参宏定义中,宏名和形参表之间不能有空格出现2.宏定义中不存在值传递,它只是一个符号的替换过程3.带参宏定义中,形参不分配内存空间,因此不必做类型定义 */ /* #define MAX(a,b) (a>b)?a:bvoid main(void){int x,y,max;printf("Plasy input two numbers :");scanf("%d %d",&x,&y);max=MAX(x,y);printf("The max is: %d\n\n",max);}*//*4.在宏定义中的形参是标识符,而宏调用中的实参可以是表达式 *//* #define SAY(y) (y)  //y可以是一个表达式 void main(){int i=0;char say[]="hello word!";while(say[i]){say[i]=SAY(say[i]);i++;}printf("\n\t%s\n\n",say); } */ /*5.在宏定义中,字符串内的形参通常要用括号括起来以避免出错 *//*//例1: #define SQ(y) (y)*(y)//#define SQ(y) y*y      (注释部分为不带括号)void main(){int a,sq;printf("input a number:");scanf("%d",&a);sq=SQ(a+1); // sq=(a+1)*(a+1)//  sq=SQ(a+1); // sq=a+1*a+1     (不带括号) printf("sq = %d\n",sq);} //例2:#define SQ(y) (y)*(y)//#define SQ(y) ((y)*(y))void main(){int a,sq;printf("input a number:");scanf("%d",&a);sq=160/SQ(a+1); // sq=160/(a+1)*(a+1) printf("sq = %d\n",sq);} *//*所以在编程过程中应尽量避免使用过多的宏定义因为在宏调用时由于优先级的存在会很容易出现逻辑错误, *//*5.带参数的宏和带参数的函数很相似,但有本质的不同除以上各点外,把同一表达式用函数处理和用宏处理的结果有可能是不同的 *///通过带参函数实现 /*void main(){int i=1;int SQ(int y);while(i<=5){printf("%d\n",SQ(i++));}} int SQ(int y){return ((y)*(y));}*/ //通过宏实现/* #define SQ(y) ( (y)*(y) )void main(){int i=1;while(i<=5){printf("%d\n",SQ(i++));}} *//*6.宏定义可以用来定义多个语句,在宏调用时,把这些语句又代换到源程序内 *//* #include<string.h>#define STR(s1,s2,s3,sum) strcat(strcat(strcat(sum,s1),s2),s3);void main(){char str1[]="上帝",str2[]="是",str3[]="笨蛋",str[40]="";STR(str1,str2,str3,str)printf("\n\tstr1= %s\n\tstr2= %s\n\tstr3= %s\n\tstr= %s\n\n",str1,str2,str3,str);}*///strcat(str1,str2)函数将字符串str2粘贴到str1的后面 

0 0
原创粉丝点击