一.define 简介
C 语言中,除了可以用 #define 定义一个标识符来表示一个常量,还可以用 #define 定义函数,例如:
//定义常量
#define A 100 //定义整型变量A值为100
#define B "Hello" //定义字符串变量B值为"Hello"(定义字符串需要加双引号)
#define C 3.1415926 //定义浮点数变量C值为3.1415926
//定义函数
#define MAX(a,b) (a>b)?a:b //取两个数最大值
#define MIN(a,b) (a<b)?a:b //取两个数最小值
凡是以 # 开头的均为预处理指令,预处理又叫预编译。预编译不是编译,而是编译前的处理。这个操作是在正式编译之前由系统自动完成的。
二.define 定义函数
1.define 定义不带参数的函数
#include <stdio.h>
#define A (x*2+5)
int main(void)
{
int x = 2;
printf("A是:%d\n",A);
return 0;
}
/*
A是:9
*/
2.define 定义带参数的函数
#include <stdio.h>
#define A(x) (x*2+5)
int main(void)
{
printf("A是:%d\n",A(2));
return 0;
}
/*
A是:9
*/
#include <stdio.h>
#define MAX(a,b) (a>b)?a:b //取两个数最大值
#define MIN(a,b) (a<b)?a:b //取两个数最小值
int main(void)
{
printf("最大值是:%d\n",MAX(5,100));
printf("最小值是:%d\n",MIN(5,100));
return 0;
}
/*
最大值是:100
最小值是:5
*/
三.define 定义函数陷阱
1.define 函数陷阱一
#include <stdio.h>
#define A(x) x*x
int main(void)
{
printf("A是:%d\n",A(2)); //2*2=4
printf("A是:%d\n",A(2+1)); //2+1*2+1=5
return 0;
}
/*
A是:4
A是:5
*/
#include <stdio.h>
#define A(x) (x)*(x)
int main(void)
{
printf("A是:%d\n",A(2)); //(2)*(2)=4
printf("A是:%d\n",A(2+1)); //(2+1)*(2+1)=9
return 0;
}
/*
A是:4
A是:9
*/
2.define 函数陷阱二
#include <stdio.h>
#define A(x) (x)*(x)
int main(void)
{
printf("A是:%d\n",A(2)); //(2)*(2)=4
printf("A是:%d\n",9/A(2+1)); //9/(2+1)*(2+1)=9
return 0;
}
/*
A是:4
A是:9
*/
#include <stdio.h>
#define A(x) ((x)*(x))
int main(void)
{
printf("A是:%d\n",A(2)); //((2)*(2))=4
printf("A是:%d\n",9/A(2+1)); //9/((2+1)*(2+1))=1
return 0;
}
/*
A是:4
A是:1
*/
总结:
#define A(x) x*x
A(2) 等价 2*2 = 4
9/A(2+1) 等价 9/2+1*2+1 = 7#define A(x) (x)*(x)
A(2) 等价 (2)*(2) = 4
9/A(2+1) 等价 9/(2+1)*(2+1) = 9#define A(x) ((x)*(x))
A(2) 等价 ((2)*(2)) = 4
9/A(2+1) 等价 9/((2+1)*(2+1)) = 1