요즘 이것저것 많이 건드는군... 오늘은 일부 라이브러리를 PHP extension으로 포팅할 일이 있어서 CentOS 5.4에서 php-devel이란 패키지를 깔고 깔짝거리고 있다. 상당 수 매크로 함수로 칠해놓은 API를 통해 PHP extension으로 포팅해야는데, 다른 거야 뭐 그럭저럭 하는데, std::string::c_str()을 RETURN_STRINGL 매크로 함수로 반환하려고 했더니 마이클잭슨 같은 경우가 발생했다. error: invalid conversion from ‘const char*’ to ‘char*’ 이게 뭐신가 하면... RETURN_STRINGL 첫번째 인자가 char*인가부다. 근데 std::string::c_str()은 const char*이란 말이지. 일단 RETURN_STRINGL이 어떻게 생겨먹은 놈인지 확인하러 휘리릭 뽕 퓨젼~ 일단 RETURN_STRINGL은 /usr/include/php/Zend/zend_API.h에 있다. #define ZVAL_STRINGL(z, s, l, duplicate) { \ char *__s=(s); int __l=l; \ (z)->value.str.len = __l; \ (z)->value.str.val = (duplicate?estrndup(__s, __l):__s); \ (z)->type = IS_STRING; \ } #define RETVAL_STRINGL(s, l, duplicate) ZVAL_STRINGL(return_value, s, l, duplicate) #define RETURN_STRINGL(s, l, duplicate) { RETVAL_STRINGL(s, l, duplicate); return; } 음... 매크로 함수가 매크로 함수를 부르고 그게 또 매크로 함수를 부르고... 아웅... 포기할까... or...