Lecture du code de l'API Zend Engine: que signifie ## (double hash)?
-
19-08-2019 - |
Question
Par curiosité, je lis le code de l’API de 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?
La solution
Le ## concatène ce qui précède le ## avec ce qui le suit. Ainsi, dans votre exemple, ZEND_FN (foo)
donnerait zif_foo
Autres conseils
Réponse d'Echo RvV.
Sachez que lors de la concaténation de chaînes littérales, vous risquez de rencontrer des incohérences entre les pré-processeurs / compilateurs. Certains auront besoin du ##
#define STR_CAT(s1, s2) s1 ## s2
comme dans
const char s[] = STR_CAT("concat", "enation")
alors que d'autres vont s'y opposer, et exigent simplement que les deux littéraux soient unis par le compilateur (par opposition au pré-processeur), donc il faudra
#define STR_CAT(s1, s2) s1 s2
HTH