tags:

views:

383

answers:

3

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?

+4  A: 

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

Ronny Vindenes
+1  A: 

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

dcw