2012-08-17 3 views
-1

작은 PHP 확장을 작성 중이며 빌드 할 때 문제가 있습니다. 코드 :ZEND_NUM_ARGS() 매크로로 인해 확장을 빌드하지 못했습니다.

.... /ext/pstat/pstat.c:122:31: error: 'ht' undeclared (first use in this function) 

ZEND_NUM_ARGS()

#define ZEND_NUM_ARGS()  (ht) 

Zend_API.h

에서 매크로하지만 'HT'는 것입니다 : 메이크업에

PHP_RINIT_FUNCTION(pstat) 
{ 
    int argc = ZEND_NUM_ARGS(); 
    return SUCCESS; 
} 

에 오류가있어? 어떤 아이디어?

답변

7

여기에 ZEND_NUM_ARGS()을 사용하고 계십니까? 이것은 요청 초기화 함수이며 사용자가 제공 한 인수를받지 않습니다.


일반적으로 항상 그런 것은 아니지만, ht은 해시 테이블을 나타내는 데 사용됩니다.

ZEND_NUM_ARGS()은 일반적으로 PHP_FUNCTION 매크로로 정의 된 함수 내에서 PHP 스크립트에서 내부 함수로 전달되는 인수의 수를 얻기 위해 사용됩니다.


당신이 다시 PHP_FUNCTION 매크로에서 추적 당신이 내부 함수 정의에 사용되는 인수의 다음과 같은 표준 설정을보고하게 될 겁니다 경우

.

#define INTERNAL_FUNCTION_PARAMETERS int ht, zval *return_value, zval **return_value_ptr, zval *this_ptr, int return_value_used TSRMLS_DC 

이 정의에는 int로 ht이 포함되어 있습니다.

PHP_RINIT_FUNCTION의 인수에는 ht이 포함되지 않습니다.

#define INIT_FUNC_ARGS  int type, int module_number TSRMLS_DC 
+0

모든 요청의 시작 시간을 PHP에 저장하고 싶습니다. PHP_RINIT_FUNCTION은 좋은 생각이지만. – dtoch

+0

자, 그럼'ZEND_NUM_ARGS'는 무엇을 필요로합니까? – Leigh

+0

요청을위한 몇 가지 인수가 있지만. 예를 들어 스크립트 이름. 이제는 게임에 대한 잘못된 위치를 이해합니다. – dtoch

관련 문제