define函数的用法
程序员文章站
2024-03-23 10:32:22
...
define
define,宏定义,C语言中 预处理命令 一种。分为无参宏定义和带参宏定义。
无参宏定义 的一般形式为:#define 宏名 字符串;
带参宏定义 的一般形式为:#define 宏名(参数表) 字符串;
关键词是预处理命令 无参 带参
预处理命令
程序设计语言的预处理的概念:在编译之前进行的处理。 C语言的预处理主要有三个方面的内容: 1.宏定义; 2.文件包含; 3.条件编译。 预处理命令以符号“#”开头
例如下面的程序段
#include<stdio.h>
#define N 100
int main(void)
{
printf("%d",N);
return 0;
}
在这里,是在编译程序对C源程序进行预处理时用100替换标识符N,
而 “在运行时用100替换标识符N” 这种说法就是错误的
无参宏定义
C语言中无参宏定义的一般形式为:#define 宏名 字符串
例如
#include<stdio.h>
#define M (a+b)
#define N a+b
int main(void)
{
int a=5,b=2;
printf("%d\n",M*M);
printf("%d\n",N*N);
return 0;
}
运行一下会出现这样的结果
这就是有无括号带来的差别。
带参宏定义
C语言允许宏带有参数。在宏定义中的参数称为形式参数,在宏调用中的参数称为实际参数。对带参数的宏,在调用中,不仅要宏展开,而且要用实参去代换形参。
带参宏定义的一般形式为: #define 宏名(形参表)字符串
例如:
#include<stdio.h>
#define M(Y) Y*Y+3*Y
#define MAX(a,b) ((a>b)?(a):(b))
int main(void)
{
int m=5,n=3,max;
printf("%d\n",M(m));
printf("max=%d\n",MAX(m,n));
return 0;
}
运行结果如下:
#define MAX(a,b) ((a>b)?(a):(b)) 与MAX函数很像,但这两者有着本质的区别,不能混为一谈。
在查阅资料时,看到了这样的情况
#include<stdio.h>
void func1(void)
{
#define M 12
printf("%d\n",M);
}
void func2(void)
{
#define M 5
printf("%d\n",M);
}
int main(void)
{
func1();
func2();
printf("hello world!");
return 0;
}
在两个函数里用宏定义,标识符都为M,值不同,分别是12 和 5
结果是这样的:
由此看出宏定义中不能出现相同的标识符
下一篇: go语言刷题:1.两数之和