目前我正在尝试使用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。
你知道这个现象吗?问候
答案 0 :(得分:0)
好的,我不知道究竟是多少,但这似乎给出了预期的结果:
B7 = B7+Bi
添加括号似乎有很大帮助。