2016-05-31 6 views
2

Я нашел это как предложение идеала затмения/интеллекта независимо от его вызова. И это он:Значение "char * _EXFUN (index, (const char *, int));"

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

Сначала это выглядит как функция, возвращающая указатель на гольца, но параметры (если это функция вообще) смотрит на меня довольно запутанной. В списке параметров у нас есть скобки.

+1

'_EXFUN' - это, очевидно, макрос - вам нужно найти его определение. –

+0

Поиск файлов заголовков для '_EXFUN'. И попытайтесь остановить компилятор после предварительной обработки и посмотреть, что он генерирует. –

+0

И кстати, где вы нашли эту строку кода? Имя, такое как '_EXFUN', недопустимо в коде пользователя, только в коде, предоставленном компилятором или стандартной библиотекой (поскольку имена, начинающиеся с символа подчеркивания, за которым следует буква верхнего регистра, зарезервированы для« реализации »). –

ответ

9

_EXFUN представляется макросом, используемым в стандартных заголовках на некоторых платформах, например. here

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

Таким образом, char *_EXFUN(index,(const char *, int)); расширяется до

char * index(const char *, int) 

Этот прием иногда делается так, что тот же заголовок может быть препроцессором с _EXFUN набор на что-то другое, например, для интроспекции сигнатур функций или для объявления экспортированных символов в библиотеке.

Смежные вопросы