PHP 7 用の extension を書いていて何度も混乱したので自分用まとめ。
zend_string を扱うマクロ
zend/zend_string.h
で定義されています。
char *ZSTR_VAL(zend_string *zstr)
size_t ZSTR_LEN(zend_string *zstr)
文字列型の zval を扱うマクロ
zend/zend_types.h
で定義されています。
zend_string *Z_STR(zval zv)
zend_string *Z_STR_P(zval *zp)
char *Z_STRVAL(zval zv)
char *Z_STRVAL_P(zval *zp)
size_t Z_STRLEN(zval zv)
size_t Z_STRLEN_P(zval *zp)
感想
Z_STRLEN
とZSTR_LEN
とあるのは仕方ないとは思うけど、わかるかこんなもん!という気持ちになりますね。
こうしてまとめてみた結果、ZSTR_
がzend_string
用のマクロ、Z_
がzval
用のマクロである、という無駄知識を獲得できました。