C语言中带参宏定义

    xiaoxiao2021-04-13  28

    #include<stdio.h> /* 1.带参宏定义中,宏名和形参表之间不能有空格出现 2.宏定义中不存在值传递,它只是一个符号的替换过程 3.带参宏定义中,形参不分配内存空间,因此不必做类型定义 */ /* #define MAX(a,b) (a>b)?a:b void 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的后面
    转载请注明原文地址: https://ju.6miu.com/read-669332.html

    最新回复(0)