2012-02-16 3 views
2

한 동료가 memcached에 약간의 C 코드를 설명하라고했습니다. 나는 내가 그것을 이해하지 못한다는 것을 인정하는 시점에있다.인수 목록이 있지만 대체 목록이없는 함수와 비슷한 매크로입니까?

대체 목록이없는 매개 변수가있는 C 함수와 비슷한 매크로 정의와 관련이 있습니다. 예를 들어, 2,751 memcached.c의 선에서 시작 :

  if (return_cas) 
      { 
       MEMCACHED_COMMAND_GET(c->sfd, ITEM_key(it), it->nkey, 
            it->nbytes, ITEM_get_cas(it)); 
       /* Goofy mid-flight realloc. */ 
       if (i >= c->suffixsize) { 
       char **new_suffix_list = realloc(c->suffixlist, 
             sizeof(char *) * c->suffixsize * 2); 
       if (new_suffix_list) { 
        c->suffixsize *= 2; 
        c->suffixlist = new_suffix_list; 

MEMCACHED_COMMAND_GET() trace.h 선 (23) 상에 정의된다 인수

#define MEMCACHED_COMMAND_GET(arg0, arg1, arg2, arg3, arg4) 

C 매크로 기능과 같은 정의를 확인. 대체 목록이 없습니다.

memcached.c에 CPP의 출력은 함수와 같은 매크로로 변신을 보여줍니다 ';'

# 2751 "memcached.c" 
      if (return_cas) 
      { 
       ; 


       if (i >= c->suffixsize) { 
       char **new_suffix_list = realloc(c->suffixlist, 
             sizeof(char *) * c->suffixsize * 2); 
       if (new_suffix_list) { 
        c->suffixsize *= 2; 
        c->suffixlist = new_suffix_list; 

사람이 프로그래머가 대체리스트를 사용하지 말고, 기능과 같은 매크로를 포함 왜 어떤 통찰력을 가지고 있습니까 생성 된 코드에 아무런 영향을주지 않는 MEMCACHED_COMMAND_GET() 같은? 이 일을하면서 어떤 목적이 제공되고 있습니까? 친절하게 미리 감사드립니다.

+1

이 질문은 http://stackoverflow.com/questions/5501990/what-can-the-macros-below-be-used-for – Jason

+0

@ Jason Excellent, 감사합니다. 그건 의미가 있습니다. 필자는 MEMCACHED_COMMAND_GET 자체에서 검색 할 생각이 전혀 없었으며 "함수와 유사한 매크로"를 포함하는 검색어 만 생각했습니다. 나는 네가 올바른 방향으로 나를 가리켜 주셔서 감사합니다. –

답변

2

Solaris 및 Mac OSX에서는 DTrace 프로브가 트리거되어 다른 것으로 확장됩니다.

+0

ENABLE_DTRACE가 정의 된 경우에만 memcached_dtrace.d에서 해당 확장이있는 memcached_dtrace.h가 생성 된 것 같습니다. 똑똑한, 똑똑한. 내 우분투 시스템에 memcached_dtrace.h 파일이 없기 때문에 나를 속였습니다. 감사! –

+2

당신은 환영합니다 (결국 나는 그것을 추가 한 사람이었습니다 ;-)) – trondn

1

이식성 문제와 관련이있을 수 있습니다 : 예를 들어, BSD와 관련이 있지만 리눅스에서는 그렇지 않은 코드입니다. 혹은 그 반대로도.

여기 구체적인 상황을 말할 수는 없지만 그 이유가있을 수 있습니다.

관련 문제