带参宏的运用
定义带参的宏,判断一个日期是否合法
#include<stdio.h>
#define isRightDay(y,m,d) {if(y<=0){printf("Year wrong!\n");return;}if(m<1||m>12) {printf("Month wrong!\n");return;}int month[]={31,0,31,30,31,30,31,31,30,31,30,31};if(y%4==0&&y%100!=0 || y%400==0)month[1]=29;else month[1]=28;if((d>=1)&&(d<=month[m-1]))printf("All right!\n");else printf("Day wrong!\n");}//这里不换行
void main()
{
int y,m,d;
printf("Input year month and day:\n");
scanf("%d %d %d",&y,&m,&d);
isRightDay(y,m,d);
}
其实不提倡这么写的,宏会在使用的地方展开,如果宏太长会使得展开后代码段过长。并且用宏不做类型检查,容易出错;
一般都是比较短的代码才用宏,如求较大值#define theMax(a,b) (a>b?a:b)