2011-02-26 10 views
9

Quando compilo ed eseguo questo codice (fa parte di un programma molto più grande), Linux si trova a metà del ciclo while, quindi smette semplicemente di funzionare.Perché C dovrebbe rimanere bloccato a metà del ciclo?

Il codice seguente stampa time: 0 e quindi si blocca, non facendo altro finché non sospendo il processo. Perché mai avrebbe stampato time: 0 ma non la seguente linea di controllo della sanità mentale?

while (i < 5) 
{ 
    printf("time: %d\n",elapsedTime); 
    printf("sanity check"); 
    foo(); 
    i++; 
} 

risposta

22

L'output di solito è bufferizzato e scritto solo dopo un flush o newline. In

printf("sanity check"); 

non c'è una nuova riga, quindi se si esegue in un ciclo infinito dopo questo, non lo vedrete. Sostituirlo con

printf("sanity check\n"); 

o

printf("sanity check"); 
fflush(stdout); 

e lo vedrai.

+0

Oh bene. Ero preoccupato per la funzione, ma pensavo di non averlo nemmeno raggiunto. Ora che so che * sono *, posso continuare a eseguire il debug. Grazie!. Accetterò la risposta in 10 minuti. quando posso. –

+1

@Raven: Avevi usato un debugger per eseguire il debug (l'indizio è nel nome), avresti saputo che era arrivato così lontano, e probabilmente perché alla fine era fallito (in foo() senza dubbio). – Clifford

+0

@Clifford - sì. Sono stato viziato con lo sviluppo di Visual Studio e C#. Sfortunatamente, non riesco a convincere VS a gestire un ambiente C normale, quindi sono rimasto bloccato con JEdit da solo. –

Problemi correlati