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

Posted

技术标签:

【中文标题】阅读 Zend Engine API 代码:##(双哈希)是啥意思?【英文标题】:Reading Zend Engine API code: What does ## (double hash) mean?阅读 Zend Engine API 代码:##(双哈希)是什么意思? 【发布时间】:2010-10-13 19:11:24 【问题描述】:

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

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

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

【问题讨论】:

【参考方案1】:

## 将 ## 之前的内容与之后的内容连接起来。因此,在您的示例中,ZEND_FN(foo) 将导致 zif_foo

【讨论】:

【参考方案2】:

Echo RvV 的回答。

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

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

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

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

#define STR_CAT(s1, s2)   s1 s2

HTH

【讨论】:

【参考方案3】:

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

【讨论】:

以上是关于阅读 Zend Engine API 代码:##(双哈希)是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章

php内核解析

PHP 危矣?Zend Engine 团队宣布脱离 Rogue Wave

每日安全资讯PHP 危矣?Zend Engine 团队宣布脱离 Rogue Wave

使用 Zend 框架阅读 gmail

Zend_Service_Twitter - 准备好 API v1.1

Zend_Mail - 通过 POP 阅读 Gmail 邮件