网络知识 娱乐 C语言 #define 用法

C语言 #define 用法

一.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 

#define A (x*2+5)

int main(void)
{
    int x = 2;

    printf("A是:%dn",A);

    return 0;
}

/*
A是:9
*/

2.define 定义带参数的函数

#include 
 
#define A(x) (x*2+5)
 
int main(void)
{

    printf("A是:%dn",A(2));
 
    return 0;
}
 
/*
A是:9
*/
#include 

#define MAX(a,b) (a>b)?a:b  //取两个数最大值
#define MIN(a,b) (a<b)?a:b  //取两个数最小值

int main(void)
{
    printf("最大值是:%dn",MAX(5,100));
    printf("最小值是:%dn",MIN(5,100));
    return 0;
}

/*
最大值是:100
最小值是:5
*/


三.define 定义函数陷阱

1.define 函数陷阱一

#include 

#define A(x) x*x

int main(void)
{
    printf("A是:%dn",A(2));    //2*2=4
    printf("A是:%dn",A(2+1)); //2+1*2+1=5
    return 0;
}

/*
A是:4
A是:5
*/
#include 

#define A(x) (x)*(x)

int main(void)
{
    printf("A是:%dn",A(2));    //(2)*(2)=4
    printf("A是:%dn",A(2+1)); //(2+1)*(2+1)=9
    return 0;
}

/*
A是:4
A是:9
*/

2.define 函数陷阱二

#include 

#define A(x) (x)*(x)
int main(void)
{
    printf("A是:%dn",A(2));      //(2)*(2)=4
    printf("A是:%dn",9/A(2+1)); //9/(2+1)*(2+1)=9
    return 0;
}

/*
A是:4
A是:9
*/
#include 

#define A(x) ((x)*(x))
int main(void)
{
    printf("A是:%dn",A(2));      //((2)*(2))=4
    printf("A是:%dn",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

参考原文:

https://blog.csdn.net/ZhaDeNianQu/article/details/120095018