2016-09-13 1 views
0

je l'extrait de code exemple suivant de code d'un main.c qui appelle 3 fonctions, avec 3 têtes - qui me donne des avertissements pour une raison inconnue:avertissement: déclaration implicite de la fonction - ordre de l'inclusion des matières?

#include "header1.h" 
 
#include "header2.h" 
 
#include "header3.h" 
 

 
int main() 
 
{ 
 
    function1(); // this is from header1 
 
    function2(); // this is from header2 
 
    function3(); // this is from header 3 
 
}

Fondamentalement, après l'utilisation de gcc, les fonctions 2 & 3 produiront l'avertissement. Cependant, après réorganisant le code à quelque chose comme ceci:

#include "header3.h" 
 
#include "header1.h" 
 
#include "header2.h" 
 
    
 

 
int main() 
 
{ 
 
    function1(); // this is from header1 
 
    function2(); // this is from header2 
 
    function3(); // this is from header 3 
 
}

Il sera alors me donner l'avertissement que les fonctions 1 & 2 sont implicites. Qu'est-ce que je fais mal ici?

+1

S'il vous plaît fournir un [mcve]. Nous devons voir le contenu exact des fichiers d'en-tête. Vous avez probablement une erreur dans un/tous (utiliser le même garde est ma conjecture). – kaylum

+1

De telles erreurs se produisent si un en-tête n'inclut pas correctement les en-têtes dépendants ou utilise des macros obscures/une compilation conditionnelle. Voir [demander], fournir un [mcve]. – Olaf

+0

@kaylum ici est l'un des fichiers d'en-tête, le suivi de repos complet '#ifndef __REZON_FUNCTIONS__ #define __REZON_FUNCTIONS__ function1 void(); #endif ' – rezon

Répondre

1

votre fichier inclus 1 devrait ressembler à ceci:

#ifndef __REZON_FUNCTIONS1__ 
#define __REZON_FUNCTIONS1__ 

#endif 

Les deux autres fichiers doivent être similaires avec le nom de la macro a changé en conséquence