21

好奇心から、Zend Engine API コードを読んでいると、#define でかなりの数の ## に遭遇しました。たとえば、/usr/lib/php5/Zend/zend_API.h:

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

この 2 行の ## (ダブル ハッシュ) 記号は何を意味していますか?

4

3 に答える 3

30

## は、## の前にあるものとその後にあるものを連結します。したがって、あなたの例では、次のようになりZEND_FN(foo)ますzif_foo

于 2009-03-17T09:12:49.113 に答える
6

エコーRvVの答え。

リテラル文字列を連結するときに、プリプロセッサ/コンパイラ間でいくつかの不整合が見つかる可能性があることに注意してください。##が必要なものもあります

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

のように

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

一方、他の人はそれを嘲笑し、代わりに2つのリテラルが(プリプロセッサではなく)コンパイラによって結合されることを要求するので、

#define STR_CAT(s1, s2)   s1 s2

HTH

于 2009-03-17T10:00:14.457 に答える
3

http://www.cppreference.com/wiki/preprocessor/sharp

于 2009-03-17T09:14:14.333 に答える