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

21

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

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

这两行代码中的##(双井号)符号代表什么意思?

3个回答

31

## 运算符可以将其前后的内容拼接在一起。因此,在您的示例中,执行 ZEND_FN(foo) 将得到 zif_foo


6

请参考RvV的答案。

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

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

就像

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

有些人可能会反对这种做法,他们只需要编译器(而不是预处理器)将这两个字面量连接起来。

#define STR_CAT(s1, s2)   s1 s2

HTH



网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接