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用のマクロである、という無駄知識を獲得できました。