Подтвердить что ты не робот

Чтение кода API Zend Engine: что означает ## (двойной хеш)?

Из любопытства я читаю код API Zend Engine и столкнулся с довольно большим количеством ## в # define. Например, в /usr/lib/php 5/Zend/zend_API.h:

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

Что означают символы ## (double hash) в этих двух строках?

4b9b3361

Ответ 1

## объединяет то, что перед ## с чем после него. Поэтому в вашем примере выполнение ZEND_FN(foo) приведет к zif_foo

Ответ 2

Ответ Echo RvV.

Имейте в виду, что при конкатенации литеральных строк вы можете найти некоторые несоответствия между препроцессорами/компиляторами. Для некоторых потребуется ##

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

как в

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

в то время как другие будут бить на нем, а вместо этого просто потребуют, чтобы два литерала присоединились компилятором (в отличие от предварительного процессора), поэтому потребуется

#define STR_CAT(s1, s2)   s1 s2

НТН