阅读Zend Engine API代码:##(双哈希)是什么意思?

时间:2009-03-17 09:06:07

标签: c php-internals

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

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

##(双重哈希)符号在这两行中意味着什么?

3 个答案:

答案 0 :(得分:30)

<#> ##连接##之前的内容和之后的内容。因此,在您的示例中,ZEND_FN(foo)会导致zif_foo

答案 1 :(得分:6)

Echo RvV的答案。

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

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

,如

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

而其他人会对它抱怨,而只是要求编译器加入两个文字(而不是预处理器),所以需要

#define STR_CAT(s1, s2)   s1 s2

HTH

答案 2 :(得分:3)