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?

Était-ce utile?

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top