2012-09-08 4 views
1

매크로 정의를 이해하는? 단지 첫번째 인수의 실제 텍스트를 취하고 전면 아웃 HPE와 함께 (##n)를 concatonates어떻게 같은 C 매크로 확장을

HTTP_ERRNO_GEN(OK, "success") 
HTTP_ERRNO_GEN(CB_message_begin, "the on_message_begin callback failed") 
HTTP_ERRNO_GEN(CB_url, "the on_url callback failed") 

HTTP_ERRNO_GEN(n, s) :

+0

환영 C 전처리의 혼란스러운 세상. –

답변

2

HTTP_ERRNO_MAP(XX)HTTP_ERRNO_GEN으로 XX 대체되며 따라서 HTTP_ERRNO_GEN(n, s) 매크로 3 번 호출 끝에 쉼표. 따라서, 세 가지 명령은 상기 다음의 3 개 개의 출력을 생성 할 것이다 : 전처리에 의해 확장 따라서

HPE_OK, 
HPE_CB_message_begin, 
HPE_CB_url, 

,

enum http_errno { 
    HTTP_ERRNO_MAP(HTTP_ERRNO_GEN) 
}; 

된다 (+ - 공백) 다음 완전히에

enum http_errno { 
    HPE_OK, 
    HPE_CB_message_begin, 
    HPE_CB_url, 
};