(一)无参宏定义
无参宏定义的一般格式为:
#define 标识符 字符串
其中:“define”为宏定义命令;“标识符”为所定义的宏名。“字符串”可以是常数、表达式、格式串等。
注意:
(1)宏名一般用大写字母表示,以与变量区别,但这并非是规定。
(2)宏定义不是C语句,所以不能在行尾加分号。否则,宏展开时,会将分号作为字符串的1个字符,用于替换宏名。
(3)在宏展开时,预处理程序仅按宏定义简单替换宏名,而不作任何检查。如果有错误,只能由编译程序在编译宏展开后的源程序时发现。
(4)宏定义命令#define出现在函数的外部,宏名的有效范围是:从定义命令之后,到本文件结束。通常,宏定义命令放在文件开头处。
(5)在进行宏定义时,可以引用已定义的宏名。
(6)对双引号括起来的字符串内的字符,即使与宏名同名,也不进行宏展开。
【例】从键盘输入不超过100个字符,并统计其中英文字母(不区分大小写)的个数,直到输入的字符为'*'或输入的字符个数超过100为止。
#include"stdio.h" /*文件包含*/
#define MAXnum 100 /*键盘输入不超过100个字符*/
void main()
{ int i,count=0;
char c;
for(i=0;i<MAXnum;i++)
{ c=getchar();
if(c=='*') /*输入的字符为'*'时结束*/
break;
if(c>='a'&&c<='z'||c>='A'&&c<='Z')
++count;
}
printf("Count=%d",count);
}
(二)有参宏定义
有参宏定义的一般格式为:
#define 宏名(形参表) 字符串
调用格式:宏名(实参表)
有参宏展开:用宏调用提供的实参字符串,直接置换宏定义命令行中相应形参字符串,非形参字符保持不变。
注意:
(1)定义有参宏时,宏名与左圆括号之间不能留有空格。否则,C编译系统将空格以后的所有字符均作为替代字符串,而将该宏视为无参宏。
(2)有参宏的展开,只是将实参作为字符串,简单地置换形参字符串,而不做任何语法检查。
【例】从键盘输入两个整数,并把其中的较大值显示出来。
#include"stdio.h"
#define MAX(a,b) ((a)>(b)?(a):(b))
main( )
{
int x,y,z;
scanf("%d%d",&x,&y);
z=MAX(x,y);
printf("Max=%d",z);
}
最后,希望这些分享能够帮助各位小伙伴们更好的掌握C语言知识点。