define的用法

#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位系统中会溢出的情况

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

 

posted @ 2013-11-24 12:58  tony7373  阅读(355)  评论(0编辑  收藏  举报