Chinaunix首页 | 论坛 | 博客
  • 博客访问: 337445
  • 博文数量: 105
  • 博客积分: 2730
  • 博客等级: 少校
  • 技术积分: 1110
  • 用 户 组: 普通用户
  • 注册时间: 2007-04-20 12:09
文章分类

全部博文(105)

文章存档

2013年(3)

2012年(2)

2011年(36)

2010年(34)

2009年(6)

2008年(20)

2007年(4)

分类:

2008-10-11 00:33:04

最近学习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,只是为了和前面的下划线断开~

阅读(963) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~