在下面的代码中,该##怎么办?
#define MAKE_TYPE(myname) \
typedef int myname ## Id; \
Run Code Online (Sandbox Code Playgroud)
ice*_*ime 22
将##在宏是串联.在这里,MAKE_TYPE(test)将扩展到:typedef int testId.
从16.3.3(##运算符):
对于这两种对象类和函数宏调用,进行复核更多宏名称来替换替换列表之前,在替换列表(而不是从一个参数)一个##预处理标记的每个实例被删除,并且前述预处理标记与以下预处理标记连接
icecrime 是正确的,但在定义中需要指出的重要一点是令牌需要是有效的预处理令牌。例子:
#define CONCAT(a,b) a ## b
CONCAT(ClassyClass, <int>); // bad, <int> is not a valid preprocessing token
CONCAT(Symbol, __LINE__); // valid as both are valid tokens
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1888 次 |
| 最近记录: |