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:
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.
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.