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

发布于 2024-07-15 02:57:51 字数 223 浏览 11 评论 0原文

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

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

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

Out of curiousity, I'm reading the Zend Engine API code and encountered quite a number of ## in their #define's. For example, at /usr/lib/php5/Zend/zend_API.h:

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

What does the ## (double hash) symbols mean in these two lines?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

携君以终年 2024-07-22 02:57:51

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

The ## concatenates what's before the ## with what's after it. So in your example doing ZEND_FN(foo) would result in zif_foo

诠释孤独 2024-07-22 02:57:51

Echo RvV 的回答。

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

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

,而

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

另一些则会犹豫不决,而只是要求编译器(而不是预处理器)连接两个文字,因此需要

#define STR_CAT(s1, s2)   s1 s2

HTH

Echo RvV's answer.

Be aware that when concatenating literal strings you may find some inconsistencies between pre-processors/compilers. Some will require the ##

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

as in

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

whereas other will baulk at it, and instead just require that the two literals will be joined by the compiler (as opposed to the pre-processor), so will require

#define STR_CAT(s1, s2)   s1 s2

HTH

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文