Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

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?

like image 968
Seh Hui Leong Avatar asked Mar 17 '09 09:03

Seh Hui Leong


3 Answers

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

like image 117
Ronny Vindenes Avatar answered Nov 12 '22 23:11

Ronny Vindenes


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

like image 32
dcw Avatar answered Nov 12 '22 21:11

dcw


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

like image 3
vartec Avatar answered Nov 12 '22 22:11

vartec