Reading Zend Engine API code: What does ## (double hash) mean?

守給你的承諾、 提交于 2019-12-18 01:56:10

问题


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?


回答1:


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




回答2:


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




回答3:


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



来源:https://stackoverflow.com/questions/653466/reading-zend-engine-api-code-what-does-double-hash-mean

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!