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?
The ## concatenates what's before the ## with what's after it. So in your example doing ZEND_FN(foo)
would result in zif_foo
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
http://www.cppreference.com/wiki/preprocessor/sharp
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With