note: la déclaration implicite précédente de ‘point_forward’ était ici

Je n’arrive pas à obtenir cette fonction récursive pour comstackr correctement, et je ne sais pas pourquoi. Le code est comme suit:

void point_forward (mem_ptr m) { mem_ptr temp; temp = m->next; if (temp->next != NULL) point_forward(temp); m->next = temp->next; } 

Mon compilateur renvoie ceci:

mm.c: 134: 6: avertissement: types conflictuels pour ‘point_forward’ [activé par défaut]
mm.c: 96: 2: remarque: la déclaration implicite précédente de ‘point_forward’ était ici

La clé est dans ceci:

la déclaration implicite précédente de ‘point_forward’ était ici

Sur la ligne 96, vous avez:

 point_forward(m); // where m is a mem_ptr; 

Comme le compilateur n’a pas encore vu de déclaration de fonction pour point_forward(m) , il “définit implicitement” (c’est-à-dire, suppose) une fonction qui retourne un int:

 int point_forward(mem_ptr m); 

Cela entre en conflit avec la définition plus tard:

 void point_forward (mem_ptr m) { 

Pour résoudre ce problème, vous pouvez soit:

  1. Placez une déclaration explicite quelque part avant la ligne 96: void point_forward(mem_ptr m); Cela indiquera au compilateur comment traiter point_forward() quand il le verra à la ligne 96, même s’il n’a pas encore vu l’implémentation de la fonction.

  2. Ou, définissez la fonction entière au-dessus de la ligne 96 (déplacez la définition de fonction de la ligne 134 à la ligne 96 ci-dessus).

Voici un peu plus sur la déclaration de fonctions .

Généralement, pour le style, je voudrais soit:

  • Si vous ne voulez pas utiliser point_forward() dans d’autres fichiers C, définissez-le en entier:

    static void point_forward(mem_ptr m) { ..function body goes here.. }

    en haut du fichier source.

  • Si vous voulez utiliser point_forward() dans d’autres fichiers C, insérez une déclaration forward:

     void point_forward(mem_ptr m); 

    dans un fichier d’en-tête pour d’autres fichiers à inclure.