【发布时间】:2016-10-13 19:04:30
【问题描述】:
目前我正在尝试使用 Visual Studio 2015 Service Pack 2 编译一些代码,该代码使用以下不是我编写的宏:
#define REM(...) __VA_ARGS__
#define EAT(...)
// Retrieve the type
#define TYPEOF(x) DETAIL_TYPEOF(DETAIL_TYPEOF_PROBE x,)
#define DETAIL_TYPEOF(...) DETAIL_TYPEOF_HEAD(__VA_ARGS__)
#define DETAIL_TYPEOF_HEAD( x , ... ) REM x
#define DETAIL_TYPEOF_PROBE(...) (__VA_ARGS__),
// Strip off the type
#define STRIP(x) EAT x
// Show the type without parenthesis
#define PAIR(x) REM x
假设 TYPEOF 宏将隔离表达式的类型。 我尝试通过以下调用调用 TYPEOF 宏:
TYPEOF( (int) m ) c;
理论上,结果应该是
int c;
而是预处理器输出
int, m, c;
更换
#define DETAIL_TYPEOF_HEAD(x, ...) REM x
与
#define DETAIL_TYPEOF_HEAD( x , ... ) X = x and VA_ARGS = __VA_ARGS__
产生这个输出:
X = (int), m, 和 VA_ARGS = c;
似乎在接收输入 (int) m 时,DETAIL_TYPEOF_HEAD 宏无法从可变参数列表中选择第一个条目 x,而是将整个列表放入 x。
你知道这种现象吗?
问候
【问题讨论】:
-
我想我以前也遇到过这种现象。它被称为Microsoft 编译器。
-
@n.m.我通常会将其标记为不具建设性,但在这种情况下,您可能是对的。 stackoverflow.com/questions/9183993/…
-
-
我认为即使使用示例来解决此问题也超出了我的能力范围。你有什么想法吗?
标签: c++ visual-c++