Ошибка: нет предыдущего прототипа для функции.Почему я получаю эту ошибку? - PullRequest
29 голосов
/ 03 марта 2012

// screen.h

#ifndef screen_h
#define screen_h

#define MAC  1
#define WIN  2
#define LNX  3

#ifdef PLATFORM 
# undef PLATFORM 
#endif

#define PLATFORM MAC

void screen_init();

#endif

// screen.c

#include <string.h>
#include <stdlib.h>

#include "screen.h"

#if PLATFORM == MAC

#include <curses.h> 

void screen_init(){
    erase();
}

#endif

Я не понимаю, почему он не видит мой прототип в screen.h

Любые предложения / советы приветствуются!

Ответы [ 3 ]

45 голосов
/ 03 марта 2012

ISO / IEC 9899: TC2 - 6.2.1.2:
Прототип функции - это объявление функции, которая объявляет типы ее параметров.

Пустой список аргументов в объявлении функции указывает на то, что число и тип параметров неизвестны. Вы должны явно указать, что функция не принимает аргументов, используя ключевое слово void. В противном случае объявление вашей функции не считается действительным прототипом.

void screen_init(void);
3 голосов
/ 30 июня 2017

Я встречал эту похожую ошибку несколько минут назад. После того, как я добавил объявление относительной функции в заголовочный файл, ошибка исчезла.
Также некоторые говорили, что отмена опции компиляции '-Wmissing-prototypes' должна сработать, но я этого не пробовал. Удачи.

2 голосов
/ 22 августа 2018

У меня только что была эта проблема сегодня.

Я определил функцию, которая только что использовалась внутри

void func(void) {
}

int main(void) {
    func();
}

Это даст мне это предупреждение. Мне пришлось добавить прототип в начале файла, чтобы избавиться от предупреждения.

void func(void);

void func(void) {
}

int main(void) {
    func();
}
...