#define SUM
(
x
)
(
x
)
+
(
x
)
这还是定义的宏函数
SUM
(
x
)吗?显然不是。编译器认为这是定义了一个宏:
SUM
,其
代表的是(
x
)
(
x
)
+
(
x
)
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
宏定义中的空格:
#define SUM (x) (x)+(x)
这还是定义的宏函数SUM(x)吗?显然不是。编译器认为这是定义了一个宏:SUM,其代表的是(x) (x)+(x)
在使用这个宏函数的时候,空格会被编译器忽略掉。也就是说,上一节定义好的宏函数SUM(x)在使用的时候在SUM 和(x)之间留有空格是没问题的。比如:SUM(3)和SUM (3)的意思是一样的
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
1、define的宏定义是将原表达式直接带进去然后再计算,不是先计算然后再带进计算的结果。注意下面的区别:
define PI 3.1415926
define n 2+2
define sin(x) x*x
define sin(x) (x)*(x)
define sin(x) ((x)*(x))
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
2、特别应用
#define Conn(x,y) x##y
#define ToChar(x) #@x
#define ToString(x) #x
x##y 表示什么?表示x连接y,举例说:
int n = Conn(123,456); 结果就是 n=123456;
char* str = Conn("asdf", "adf") 结果就是 str = "asdfadf"; 怎么样,很神奇吧
#################################################################
#@x,其实就是给x加上单引号, 结果返回是一个 const char。
举例说: char a = ToChar(1); 结果就是 a='1';
做个越界试验
char a = ToChar(123); 结果是 a='3';
但是如果你的参数超过四个字符,编译器就给给你报错了!
error C2015: too many characters in constant :P
###################################################################
#x,估计你也明白了,他是给x加双引号
char* str = ToString(123132);
就成了 str="123132";
####################################################################
常用的标准宏定义:
#define SEC_A_YEAR (60*60*24*365)UL 定义一年有多少秒,注意要考虑16位系统中会溢出的情况
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////