21

出于好奇,我正在阅读 Zend Engine API 代码,并在他们的#define 中遇到了相当多的##。例如,在 /usr/lib/php5/Zend/zend_API.h:

#define ZEND_FN(name) zif_##name
#define ZEND_MN(name) zim_##name

这两行中的##(双哈希)符号是什么意思?

4

3 回答 3

30

## 将 ## 之前的内容与之后的内容连接起来。所以在你的例子中,这样做ZEND_FN(foo)会导致zif_foo

于 2009-03-17T09:12:49.113 回答
6

Echo RvV 的回答。

请注意,在连接文字字符串时,您可能会发现预处理器/编译器之间存在一些不一致。有些需要##

#define STR_CAT(s1, s2)   s1 ## s2

如在

const char s[] = STR_CAT("concat", "enation")

而其他人会犹豫不决,而是只要求编译器将两个文字连接起来(而不是预处理器),所以需要

#define STR_CAT(s1, s2)   s1 s2

高温高压

于 2009-03-17T10:00:14.457 回答
3

http://www.cppreference.com/wiki/preprocessor/sharp

于 2009-03-17T09:14:14.333 回答