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