2009-03-17 9 views
21

Aus Neugier, lese ich die Zend Engine API-Code und stieß auf eine Reihe von ## in ihren # Definitionen. Zum Beispiel bei /usr/lib/php5/Zend/zend_API.h:Zend Engine API-Code lesen: Was bedeutet ## (Doppel-Hash)?

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

Was bedeuten die ## (Doppel Hash) Symbole in diesen beiden Linien bedeuten?

Antwort

30

Das ## verkettet, was vor dem ## ist, was danach ist. Also in Ihrem Beispiel würde tun ZEND_FN(foo) führen zif_foo

6

Echo RVV Antwort.

Beachten Sie, dass bei der Verkettung von Literalstrings einige Inkonsistenzen zwischen Vorprozessoren/Compilern auftreten können. Einige werden die ##

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

wie in

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

während andere erfordert es baulk und stattdessen verlangen nur, dass die beiden Literale werden durch den Compiler verbunden werden (im Gegensatz zu den prä- Gegensatz Prozessor), wird dies erfordern

#define STR_CAT(s1, s2) s1 s2 

HTH