阅读 Zend Engine API 代码:##(双哈希)是什么意思?
出于好奇,我正在阅读 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
## 将 ## 之前的内容与其之后的内容连接起来。 因此,在您的示例中执行
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 inzif_foo
Echo RvV 的回答。
请注意,在连接文字字符串时,您可能会发现预处理器/编译器之间存在一些不一致。 有些需要 ##
,而
另一些则会犹豫不决,而只是要求编译器(而不是预处理器)连接两个文字,因此需要
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 ##
as in
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
HTH
http://www.cppreference.com/wiki/preprocessor/sharp
http://www.cppreference.com/wiki/preprocessor/sharp