私はZend EngineのAPIコードを読んでいて、#defineにかなりの数の##があります。例えば、/usr/lib/php5/Zend/zend_API.hで:##(ダブルハッシュ)記号は、次の2行にZend Engine APIコードを読む:##(double hash)とはどういう意味ですか?
#define ZEND_FN(name) zif_##name
#define ZEND_MN(name) zim_##name
何を意味するのでしょうか?
私はZend EngineのAPIコードを読んでいて、#defineにかなりの数の##があります。例えば、/usr/lib/php5/Zend/zend_API.hで:##(ダブルハッシュ)記号は、次の2行にZend Engine APIコードを読む:##(double hash)とはどういう意味ですか?
#define ZEND_FN(name) zif_##name
#define ZEND_MN(name) zim_##name
何を意味するのでしょうか?
##は##の前にあるものを連結し、後のものを連結します。だからあなたの例ではZEND_FN(foo)
を行うとzif_foo
エコーRVVの答えになるでしょう。
リテラル文字列を連結すると、プリプロセッサ/コンパイラ間に矛盾が生じることに注意してください。他方はそれをbaulk、その代わりにちょうど前に反対ように、2つのリテラルが(コンパイラによって接合されることを必要とするのに対し、いくつかは
const char s[] = STR_CAT("concat", "enation")
のように##
#define STR_CAT(s1, s2) s1 ## s2
を必要としますプロセッサ)、これが必要になります
#define STR_CAT(s1, s2) s1 s2
HTH