C 语言 关于 宏 中的 # 和 ## 基本知识
2012-03-17 08:05
239 查看
今天看到一篇技术博文的时候,看到##和#,当时真的很无语阿又看到一个自己不知道的知识,呵呵呵~~
此处贴出来,顺便看看其用法:
第一:
通俗来说:
##:就是连接两个参数
# :就是将参数转化为字符串
话不多说,只看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 )
此处贴出来,顺便看看其用法:
第一:
通俗来说:
##:就是连接两个参数
# :就是将参数转化为字符串
话不多说,只看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 )
相关文章推荐
- 关于OpenGL混合的基本知识
- CG语言基础知识整理——基本数据类型
- JS中关于正则表达式的基本知识
- 关于c语言文件的基本操作1
- Shell 脚本语言基本知识
- 转载:关于linux图形界面的基本知识
- 关于接口的基本知识01
- 关于 frame的一些基本知识 --转(经典推荐)
- 关于linux图形界面的基本知识
- 关于数组的基本知识
- C程序设计语言- 结构-5.1----结构的基本知识、结构与函数、结构数组、指向结构的指针
- 【脚本语言系列】关于Python基础知识Lambda表达式,你需要知道的事
- 关于linux图形界面的基本知识
- oc语言的基本知识
- 关于存储的基本知识:
- 关于Java String类型的10个基本知识
- 关于OpenGL混合的基本知识
- C语言基础知识【基本语法】
- LotusScript语言的基本知识
- 关于linux图形界面的基本知识