Zend Engine APIコードの読み取り:##(ダブルハッシュ)とはどういう意味ですか?
-
19-08-2019 - |
質問
不思議なことに、私はZend Engine APIコードを読んでいて、#defineでかなりの数の##に遭遇しました。たとえば、/ usr / lib / php5 / Zend / zend_API.hで:
#define ZEND_FN(name) zif_##name
#define ZEND_MN(name) zim_##name
これらの2行の##(ダブルハッシュ)記号の意味は何ですか?
解決
##は、##の前にあるものとその後にあるものを連結します。したがって、あなたの例ではZEND_FN(foo)
を行うとzif_foo
他のヒント
Echo RvVの答え。
リテラル文字列を連結する場合、プリプロセッサ/コンパイラ間でいくつかの矛盾が見つかる可能性があることに注意してください。 ##
が必要なものもあります#define STR_CAT(s1, s2) s1 ## s2
のように
const char s[] = STR_CAT("concat", "enation")
一方、他の人はそれに悩まされますが、代わりに2つのリテラルがコンパイラによって結合されることを必要とします(プリプロセッサではなく)ので、必要になります
#define STR_CAT(s1, s2) s1 s2
HTH
所属していません StackOverflow