【发布时间】:2012-01-04 03:23:54
【问题描述】:
谁能解释一下为什么?我读到的只是相信我,但我不能仅仅因为有人这么说就相信某事。
我尝试了该方法,但找不到任何出现的错误:
#define mymacro(a) int a ## __LINE__
mymacro(prefix) = 5;
mymacro(__LINE__) = 5;
int test = prefix__LINE__*__LINE____LINE__; // fine
那么为什么我需要这样做(引自网页):
但是,当您使用## 时,您需要双层间接。 基本上,您需要为“令牌粘贴”创建一个特殊的宏,例如 如:
#define NAME2(a,b) NAME2_HIDDEN(a,b) #define NAME2_HIDDEN(a,b) a ## b相信我——你真的需要这样做 这! (请没有人给我写信说它有时没有 第二层间接。尝试将符号与 __ LINE__ 看看会发生什么。)
编辑: 有人能解释一下为什么他在下面声明之前使用NAME2_HIDDEN 吗?在我使用之前定义NAME2_HIDDEN 宏似乎更合乎逻辑。这是什么诡计吗?
【问题讨论】:
-
我不确定我明白你在问什么......
-
我看有点不清楚,我会编辑。
-
@tenfour,完成。你知道我的编辑部分的答案吗?
标签: c++ visual-c++ macros