2017-01-03 7 views
4

좀 라이브러리를 다운로드하여이 기능을 다음과 같이 선언한다 :함수 선언에서이 매크로의 역할은 무엇입니까?

#if !defined(__ANSI_PROTO) 
#if defined(_WIN32) || defined(__STDC__) || defined(__cplusplus) 
# define __ANSI_PROTO(x)  x 
#else 
# define __ANSI_PROTO(x)  () 
#endif 
#endif 

int httpdAddVariable __ANSI_PROTO((httpd*,char*, char*)); 

여기 __ANSI_PROTO의 역할은 무엇입니까? 이이 기능을 지원하지 않았다 단순히

int httpdAddVariable (httpd*,char*, char*); 
+0

이 있거나없는 ANSI C 프로토 타입 –

+1

을 사용하거나 사용하지 않고 함수 및 인수를 선언하는 매크로 아마도 인수 시그니처가없는 초기 C 컴파일러를 처리할까요? – chux

답변

7

사전 ANSI C를 선언 선호되는 이유 :

int httpdAddVariable(); /* = arguments unspecified*/ 

그래서 매크로가하는 일입니다 :

int httpdAddVariable (httpd*,char*, char*); 

그것은 단지이 지원 . 프로토 타입 지원을 발견하면 인수 유형을 선언에 붙여 넣습니다. 그렇지 않으면 그냥 붙여 넣습니다 ().

+1

코드에서이 매크로의 모든 모양을 안전하게 제거 할 수 있습니까? –

+4

예. (고대 컴파일러를 지원할 계획이 아니라면). – PSkocik