Ваши прототипы должны соответствовать вашим реальным функциям. Ваш не:
int doct(int*);
private int doct (int *a)
Либо измените прототип на:
private int doct(int*);
или измените функцию на:
int doct (int *a)
Вам также следует помнить, что private
не является частью языка Си, но люди часто используют его для замены статического. Это можно сделать по линии:
#define private static
с единственным условием, что этот макрос должен быть активным везде, где вы используете имя private
. Если он не работает с вашим прототипом, возможно, это потому, что он не определен на этом этапе. Мой совет - вообще отказаться от private
и использовать статический (если действительно так определен private
). Люди должны изучать язык, а не брать на себя ненужные костыли (по моему мнению).
Другие фавориты, которых я тоже презираю:
#define global extern
#define begin {
#define end }
private
и global
используются для обозначения локального для этого файла и глобального для всех файлов соответственно. begin
и end
- особенно мерзкие мерзости от людей, которые должны вернуться в Паскаль, где они принадлежат: -)
В дополнение к этой проблеме, ваша строка:
static int a = 0;
на самом деле скроет параметр, который вы передаете в функцию (так как она имеет то же имя) и:
*a = a;
вызовет ошибку (так как он имеет другой тип). Это редко хорошая идея сделать это. Переименуйте один из них.