2013-04-24 12 views
7

Non riesco a ottenere questa funzione ricorsiva per compilare correttamente, e non sono sicuro del perché. Il codice è il seguente:nota: la precedente dichiarazione implicita di "point_forward" era qui

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

mio compilatore restituisce questo:

mm.c: 134: 6: warning: tipi contrastanti per 'point_forward' [abilitato per impostazione predefinita]
mm. C: 96: 2: Nota: precedente dichiarazione implicita di 'point_forward' stato qui

+2

si prega di incollare quello che si ha in linea 96 –

+0

point_forward (m); – user2313514

+0

Questa è l'unica altra istanza di questa funzione nel mio codice. – user2313514

risposta

12

La chiave è in questo:

precedente implicita dichiarazione di 'point_forward' era qui

on line 96 si ha:

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

Dal momento che il compilatore non ha ancora visto una dichiarazione di funzione per point_forward(m), esso "implicitamente definisce "(cioè, assume) una funzione che restituisce un int:

int point_forward(mem_ptr m); 

Questo conflitti con la definizione più tardi:

void point_forward (mem_ptr m) { 

Per risolvere questo problema, è possibile:

  1. Metti una dichiarazione esplicita da qualche parte prima linea 96: void point_forward(mem_ptr m); Questo dirà al compilatore come trattare point_forward() quando lo vede sulla linea 96, anche se non ha ancora visto l'implementazione della funzione.

  2. Oppure, definire l'intera funzione sopra la riga 96 (spostare la definizione della funzione dalla riga 134 in avanti alla riga 96 sopra).

Ecco un po 'di more about declaring functions.

In generale, per lo stile, lo farei neanche:

  • Se non si desidera utilizzare point_forward() in qualsiasi altro file C, definirlo in piena:

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

    a la parte superiore del file sorgente.

  • Se si desidera utilizzare point_forward() in altri file C, mettere una dichiarazione anticipata:

    void point_forward(mem_ptr m); 
    

    in un file di intestazione per altri file da includere.

Problemi correlati