2016-05-31 20 views
2

Ich fand dies als ein Vorschlag der Finsternis idexer/intelisence, wie auch immer sie es nennen. Und das ist es:Bedeutung von "char * _EXFUN (index, (const char *, int));"

char *_EXFUN(index,(const char *, int)); 

Zuerst sieht es aus wie eine Funktion einen Zeiger für eine char Rückkehr, aber die Parameter (wenn es eine Funktion überhaupt ist) sieht für mich ziemlich verwirrend. Wie kommen in die Parameterliste haben wir eine Klammern.

+1

'_EXFUN' ist offensichtlich ein Makro - Sie müssen seine Definition finden. –

+0

Durchsuchen Sie Ihre Header-Dateien nach '_EXFUN'. Und versuchen Sie den Compiler nach der Vorverarbeitung zu stoppen und sehen Sie, was er erzeugt. –

+0

Und nebenbei, wo haben Sie diese Codezeile gefunden? Ein Name wie '_EXFUN' ist im Benutzercode nicht erlaubt, nur in Code, der von einem Compiler oder der Standardbibliothek bereitgestellt wird (da Namen, die mit einem Unterstrich gefolgt von einem Großbuchstaben beginnen, für" die Implementierung "reserviert sind). –

Antwort

9

_EXFUN scheint ein Makro zu sein, das in Standard-Headern auf einigen Plattformen verwendet wird, z. here

#ifndef _EXFUN 
# define _EXFUN(N,P) N P 
#endif 

Damit erweitert char *_EXFUN(index,(const char *, int)); zu

char * index(const char *, int) 

Dieser Trick manchmal getan wird, so dass der gleiche Header kann mit _EXFUN Satz auf etwas anderes vorverarbeitet werden, z.B. um Funktionssignaturen zu inspizieren oder exportierte Symbole in einer Bibliothek zu deklarieren.

Verwandte Themen