2017-01-03 5 views
4

J'ai téléchargé une bibliothèque et il déclare les fonctions de la manière suivante:Quel est le rôle de cette macro dans la déclaration de fonction?

#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*)); 

Quel est le rôle de __ANSI_PROTO ici? Pourquoi est-il préférable de déclarer simplement

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

a macros pour déclarer des fonctions et des arguments avec ou sans * ANSI C prototypes –

+1

Peut-être pour faire face à des compilateurs C précoces qui n'ont pas de signature d'argument? – chux

Répondre

7

pré-ANSI C n'a pas soutenu ceci:

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

Il ne soutenu ceci:

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

est donc ce que la macro fait . Il colle les types d'arguments dans la déclaration s'il détecte le support du prototype; sinon, il ne colle que ().

+1

Donc, je peux supprimer en toute sécurité toutes les apparences de cette macro à partir du code? –

+4

Oui. (Sauf si vous envisagez de soutenir les compilateurs antiques). – PSkocik