Zend Engine APIコードの読み取り:##(ダブルハッシュ)とはどういう意味ですか?

StackOverflow https://stackoverflow.com/questions/653466

  •  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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top