Возникли проблемы с использованием файлов .h для экспорта функций

#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 таким образом?