一.宏定义(2) --# 、#@ 和## 操作等
2012-09-18 22:37
330 查看
2 # 、#@ 和## 操作
# :将宏参数字串化(只在有参数的时候用到)
如:
#define PRINTF_OP(x) printf(#x"is %d\n", (x) );
Code:
int i=10;
int j=2;
PRINTF_OP(20);
PRINTF_OP(i/j);
那么将输出:
## :将## 前后的连接两个字串(可以不是参数)定义为一个标识符,可用于简化一些操作,比如防止命名冲突之类的。
#define PRINTF_OP2(k,n) printf("PRINTF_OP2"#k#n" is %d\n", k##n);
#define PRINTF_OP3() printf("PRINTF_OP3k1 is %d\n", k##1 );
Code:
intk1=20;
intk2=40;
PRINTF_OP2(k,1);
PRINTF_OP2(k,2);
PRINTF_OP3();
输出:
#@:将宏参数字符(只在有参数的时候用到)
#definePRINTF_OP4(x) printf("PRINTF_OP4 is %d %c\n",x ,#@x );
PRINTF_OP4(3);
输出:
PRINTF_OP4 is 3 3
3 老生常谈#define 和typedef
宏替换只作替换,不做计算,不做表达式求解 , 而typedef不是简单替换 ,而是采用如同定义变量的方法那样来声明为一种类型。
#defineint_ptr int *
int_ptra, b; //相当于int * a, b;只是简单的宏替换
你或许会高高兴兴的认为a , b 都是指针,但是事实只是a是指针,而b只是一个int类型的数据。
typedefint* int_ptr;
int_ptra, b; //a, b 都为指向int的指针,typedef为int* 引入了一个新的助记符
这个才真正的达到了你想要的结果。
# :将宏参数字串化(只在有参数的时候用到)
如:
#define PRINTF_OP(x) printf(#x"is %d\n", (x) );
Code:
int i=10;
int j=2;
PRINTF_OP(20);
PRINTF_OP(i/j);
那么将输出:
## :将## 前后的连接两个字串(可以不是参数)定义为一个标识符,可用于简化一些操作,比如防止命名冲突之类的。
#define PRINTF_OP2(k,n) printf("PRINTF_OP2"#k#n" is %d\n", k##n);
#define PRINTF_OP3() printf("PRINTF_OP3k1 is %d\n", k##1 );
Code:
intk1=20;
intk2=40;
PRINTF_OP2(k,1);
PRINTF_OP2(k,2);
PRINTF_OP3();
输出:
#@:将宏参数字符(只在有参数的时候用到)
#definePRINTF_OP4(x) printf("PRINTF_OP4 is %d %c\n",x ,#@x );
PRINTF_OP4(3);
输出:
PRINTF_OP4 is 3 3
3 老生常谈#define 和typedef
宏替换只作替换,不做计算,不做表达式求解 , 而typedef不是简单替换 ,而是采用如同定义变量的方法那样来声明为一种类型。
#defineint_ptr int *
int_ptra, b; //相当于int * a, b;只是简单的宏替换
你或许会高高兴兴的认为a , b 都是指针,但是事实只是a是指针,而b只是一个int类型的数据。
typedefint* int_ptr;
int_ptra, b; //a, b 都为指向int的指针,typedef为int* 引入了一个新的助记符
这个才真正的达到了你想要的结果。
相关文章推荐
- 宏定义中#和##符号的使用和宏定义展开
- 宏定义 # 和 ##
- C/C++常用宏定义,注意事项,宏中#和##的用法
- C/C++宏定义中#与##区别
- 关于宏定义中#与##的用法
- C++/C宏定义中##与#的含义
- [c/c++]宏定义,#,##
- 宏定义中的运算符:#和##
- 宏定义中的##操作符和... and _ _VA_ARGS_ _
- zend中常见的宏定义操作
- C/C++中 宏定义字符串 操作
- linux内核中的fcntl.h文件操作中的打开文件模式的宏定义
- 【转】宏定义中##和#的作用
- 宏定义中##和#的使用
- 宏定义中#与##
- c语言实现队列结构操作的宏定义
- 宏定义里面的#和##
- c语言宏定义中的#、##应用实例
- 宏定义中的#、##
- #define assert_param(expr) ((void)0) 这是个宏定义,(void)0执行的操作