#c
#c
Вопрос:
У меня есть файл .c, содержащий код для функций, и файл .h, который настраивает прототипы функций, чтобы к ним можно было получить доступ из других файлов, но они конфликтуют.
Вот ошибка, которую я получаю:
file.c:111: error: ‘Function’ redeclared as different kind of symbol
file.h:16: error: previous declaration of ‘Function’ was here
В файле.c:
#include "file.h"
...
void *Function(const char *filename) {
...
}
В файле.h:
typedef void (*Function)(const char *filename);
Заранее спасибо!
Ответ №1:
Вы создаете typedef указателя на функцию вместо прототипа. В вашем объявлении говорится, что переменная типа Function
является указателем на функцию, ничего не возвращающую и принимающую const char*
.
Я думаю, что то, что вы действительно хотите в файле .h, это:
void *Function(const char *filename);
Комментарии:
1. ему тоже не нужно
extern
?2. @Alnitak: Я не уверен, что есть. Я не думал, что прототипы функций нужны
extern
, но я могу ошибаться.3. @Fred Я проверил — C FAQ говорит, что это необязательно ( c-faq.com /~scs/cclass/notes/sx5b.html ) но я всегда включаю это по привычке…
4. @Alnitak: Спасибо за проверку. Я уверен, что это ничему не повредит. 8v)
5. Здравствуйте. Это сработало. В прошлый раз я использовал typedef, потому что я посмотрел на пример, где файл .h использовал его, и это сработало. Есть идеи, почему они использовали typedef таким образом?