发布于 2015-04-21 22:01:20
Microsoft /C++编译器从未要求##预处理操作符的结果是有效的预处理令牌。@##O的目的是在O给出的数字前面粘贴一个@字符,中间没有任何空格。因此,API_SET_BY_ORDINAL(GetSystemTime, 633, x)将扩展到GetSystemTime @633 NONAME。这个宏不打算在C/C++代码中使用,而是作为模块定义( 出口报表,.DEF)文件中的一部分使用。
虽然这个宏是新的,但其他没有生成有效预处理令牌的##示例已经在微软的头上存在很长时间了。例如,我可以在2000年7月发布的Platform报头的标题中找到以下行,这是我手头上最老的版本:
#define _VARIANT_BOOL /##/注意,//不是有效的预处理令牌。因为没有//操作符,所以它是两个独立的预处理令牌。
https://stackoverflow.com/questions/29782488
复制相似问题