nota: la statement implícita anterior de ‘point_forward’ estaba aquí

Parece que no puedo comstackr correctamente esta función recursiva, y no estoy seguro de por qué. El código es el siguiente:

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

Mi comstackdor devuelve esto:

mm.c: 134: 6: advertencia: tipos en conflicto para ‘point_forward’ [habilitado de forma predeterminada]
mm.c: 96: 2: nota: la statement implícita anterior de ‘point_forward’ estaba aquí

La clave está en esto:

La statement implícita anterior de ‘point_forward’ estaba aquí

En la línea 96 tienes:

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

Como el comstackdor todavía no ha visto una statement de función para point_forward(m) , “define implícitamente” (es decir, supone) una función que devuelve un int:

 int point_forward(mem_ptr m); 

Esto entra en conflicto con la definición más adelante:

 void point_forward (mem_ptr m) { 

Para solucionar esto, puede:

  1. Coloque una statement explícita en algún lugar antes de la línea 96: void point_forward(mem_ptr m); Esto le dirá al comstackdor cómo tratar a point_forward() cuando lo vea en la línea 96, aunque aún no haya visto la implementación de la función.

  2. O bien, defina la función completa por encima de la línea 96 (mueva la definición de la función desde la línea 134 hacia adelante hasta la línea 96).

Aquí hay un poco más sobre la statement de funciones .

Generalmente, por estilo, yo:

  • Si no desea usar point_forward() en ningún otro archivo C, point_forward() por completo:

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

    en la parte superior del archivo fuente.

  • Si desea usar point_forward() en otros archivos C, ponga una statement de reenvío:

     void point_forward(mem_ptr m); 

    en un archivo de encabezado para otros archivos para incluir.