prev up next   top/contents search

comp.lang.c FAQ 列表· 问题 10.20

我有一些旧代码,试图使用一个宏来构造标识符,例如

#define Paste(a, b) a/**/b
这样的宏来构造标识符,但它不再起作用了。


早期预处理器实现(尤其是 Reiser 的)中有一个未文档化的功能,即注释会完全消失,因此可以用于标记粘贴。ANSI 规定(K&R1 也是如此)注释会被替换为空白字符,所以它们不能在 aPaste()宏中移植使用。然而,由于标记粘贴的需求已被证明且是真实的,ANSI 引入了一个明确定义的标记粘贴运算符,##,可以这样使用

	#define Paste(a, b) a##b

在 ANSI 之前的编译器中,你还可以尝试用以下方法来粘贴标记

	#define	XPaste(s)	s
	#define	Paste(a, b)	XPaste(a)b
另请参阅问题 11.17

参考文献:ISO Sec. 6.8.3.3
Rationale Sec. 3.8.3.3
H&S Sec. 3.3.9 p. 52


prev up next   contents search
关于此 FAQ 列表   关于 Eskimo   搜索   反馈   版权

Eskimo North 托管