define函数的用法

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
结果是这样的:
在这里插入图片描述由此看出宏定义中不能出现相同的标识符


  • 18
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值