#define是一个预处理器的宏定义语句。
比如定义一个常量
#define X 100
这样呢,在代码段中出现的任何X的地方都将替换成100
或者定义一个表达式
#define MAX(A, B) A > B ? A : B
使用:
MAX(2,3);//将返回3
MAX(2,3)其实被替换成了2 > 3 ? 2 : 3
还可以定义一个函数
#define FUN(A,B,C) void A##B(){std::cout<<#C<<std::endl;}
使用:
FUN(fun,123,test 123);
fun123();
在使用宏定义函数的时候呢,需要先调用宏来构造出函数,然后才能使用正确的函数名来输出。
##的意思是将A和B连接起来,如果不使用##连接的话,那么函数名就会出现fun 123中间有个空格,这不是有效的c++函数,就会报错。
#C的意思呢,就是把C转换成有效的c++字符串字面量,这里如果不是用#,那么,在构造函数的时候就会导致编译器不知道C是什么类型,导致未定义。
有时候这种宏定义会非常的长,可以把宏定义写成好几行来显示
#define FUN(A,B,C) voi\
d A##B(){std::cout<<#C\
<<std::endl;}
只需要在每一个换行的地方插入一个‘\'就可以了
当然了,#define常用在C语言里,在C++里呢,也有一套解决方案,比如定义一个常量可以使用 const ,或者using,定义一个函数呢,可以使用模板。
#define呢就是一种替换,而且是一种无条件的替换,只有当被替换时才能检查出语句是否有效,这种预处理器指令也是在编译后就消失了,不存在于源文件中。
有人说#define已经过时了,但是我相信,每一个语句的出现,都必将是有意义的。你觉得呢?
感谢查阅,如若能帮到您,是我莫大的荣幸!