Lecture du code de l’API Zend Engine: que signifie ## (double hash)?

Par curiosité, je lis le code de l’API Zend Engine et rencontre un grand nombre de ## dans leurs # define. Par exemple, à /usr/lib/php5/Zend/zend_API.h:

#define ZEND_FN(name) zif_##name #define ZEND_MN(name) zim_##name 

Que signifient les symboles ## (double hachage) dans ces deux lignes?

Le ## concatène ce qui précède le ## avec ce qui le suit. Donc, dans votre exemple, faire ZEND_FN(foo) donnerait zif_foo

Réponse d’Echo RvV.

Sachez que lors de la concaténation de chaînes littérales, vous pouvez trouver des incohérences entre les pré-processeurs / compilateurs. Certains auront besoin du ##

 #define STR_CAT(s1, s2) s1 ## s2 

un péché

 const char s[] = STR_CAT("concat", "enation") 

alors que d’autres verrouillent, et exigent simplement que les deux littéraux soient joints par le compilateur (par opposition au pré-processeur), il faudra donc

 #define STR_CAT(s1, s2) s1 s2 

HTH