最近学习simple scalar的源代码,有一句不懂了:
#define DEFINST(OP,MSK,NAME,OPFORM,RES,FLAGS,O1,O2,I1,I2,I3) \
&&opcode_##OP,
第二行的符号什么意思,如何处理呢?
找到了一篇介绍宏的文章,先记录下来基础知识:
在c++中:
#define Stack(T) Stack__ ##T
#define Stackdeclare(T) class Stack(T) {.....}
Stackdeclare(int);
Stackdeclare(char);
.......
Stack(int) s1;
Stack(char) s2;
但是并不是simple中用到的。
在宏定义中为了避免字符串和变量的歧义,使用#符号来在必要的时候标记字符串或符号。
两个#表示变量,一个#表示字符串。
源文件:
#define A(x) T##x
#define B(x) #x
A(1);
B(1);
预处理后:
T1;
"1";
A的用法相当于区别Tx,x是一个宏替换的变量;B的用法表示在x表示的内容两边加双引号,因为如果在宏定义的时候加双引号是被判定为字符串(不包括双引号)。
所以这两种方法都是弥补宏定义的设计中的不足。
所以##OP就是OP,只是为了和前面的下划线断开~
阅读(995) | 评论(0) | 转发(0) |