web-dev-qa-db-fra.com

Erreur: pas de prototype précédent pour la fonction. Pourquoi est-ce que je reçois cette erreur?

// 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

Je ne comprends pas pourquoi il ne voit pas mon prototype dans screen.h

Toutes les suggestions/astuces sont appréciées!

27
jasonaburton

ISO/IEC 9899: TC2 - 6.2.1.2:
Un prototype de fonction est une déclaration d'une fonction qui déclare les types de ses paramètres.

Une liste d'arguments vide dans une déclaration de fonction indique que le nombre et le type de paramètres sont inconnus. Vous devez indiquer explicitement que la fonction ne prend aucun argument en utilisant le mot clé void. Sinon, votre déclaration de fonction ne compte pas comme un prototype valide.

void screen_init(void);
44
mizo

Je viens d'avoir ce problème aujourd'hui.

J'ai défini une fonction qui vient d'être utilisée en interne

void func(void) {
}

int main(void) {
    func();
}

Cela me donnera cet avertissement ... J'ai dû ajouter le prototype au début du fichier pour supprimer cet avertissement.

void func(void);

void func(void) {
}

int main(void) {
    func();
}
1
Paul

J'ai rencontré cette erreur similaire il y a quelques minutes. Après avoir ajouté la déclaration de fonction relative dans le fichier head, l'erreur a disparu. 
En outre, certains ont dit que l'annulation de l'option de compilation '-Wmissing-prototypes' devrait fonctionner, mais je ne l'avais pas essayé. Bonne chance.

1
ProbHunter