今天看到一篇技术博文的时候,看到##和#,当时真的很无语阿又看到一个自己不知道的知识,呵呵呵~~
此处贴出来,顺便看看其用法:
第一:
通俗来说:
##:就是连接两个参数
#
:就是将参数转化为字符串
话不多说,只看DEMO:
include<stdio>
#define
S1( s)
#s
#define
S2( a, b)
int( a##e##b)
int
main()
{
printf(S1(12sd));
//!>输出字符串"12sd"
printf("%d\n ", S2( 1, 3));
//!>连接后的是2e3,但是输出:1000
return
0;
//!> 请注意:连接后的操作可以按照既定的方法处理,所以此处是1000
}
第二:
当宏参数是另一个宏的时候需要注意的是凡宏定义里有用'#'或'##'的地方宏参数是不会再展开.
看DEMO:
#include <stdio.h>
#define
NUM
2
#define
GO(a, b)
int( a##b )
int main()
{
printf("%s\n", GO( NUM, NUM ));
//!> 由上面的法则可知此处的结果是NUMNUM,并不是22
}
需要增加一个中间处理转化:
#define
NUM
(2)
#define
_GO( a, b)
int ( a##b)
//!> 中间转化环节
#define
GO( a, b)
_GO( a, b )