欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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;
}

运行一下会出现这样的结果
define函数的用法这就是有无括号带来的差别。


带参宏定义

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函数的用法
#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
结果是这样的:
define函数的用法由此看出宏定义中不能出现相同的标识符


相关标签: 笔记 c语言