Forum: PC-Programmierung c - Debugging, linux terminal: printf verrekt ohne newline wenn danach endlosschleife


von X. H. (shadow0815)


Lesenswert?

1
#include <stdio.h>
2
3
int main (void)
4
{
5
    printf("mal sehn ob ich hier stecken bleibe");
6
    while(1); // simulierter endlosschleifen-bug
7
    return 0;
8
}

Warum wird die Zeile (im Linux Terminal) nie ausgegeben, wenn ich den
Text nicht mit einem newline '\n' abschließe?
Das ist beim Debugging irgendwie total doof, wenn man das newline am 
Ende vergisst...

von Dumdi D. (dumdidum)


Lesenswert?

Weil der Buffer nicht 'geflusht' wird.

von Peter II (Gast)


Lesenswert?

X. H. schrieb:
> Warum wird die Zeile (im Linux Terminal) nie ausgegeben, wenn ich den
> Text nicht mit einem newline '\n' abschließe?

weil das flush fehlt.

Ich glaube es gibt eine Möglichkeit, das Puffer anzuschalten. Fällt mir 
aber im Moment nicht ein.

von J. Eder (Gast)


Lesenswert?

Probier mal:
1
#include <stdio.h>
2
3
int main (void)
4
{
5
    printf("mal sehn ob ich hier stecken bleibe");
6
    fflush(stdout);
7
    while(1); // simulierter endlosschleifen-bug
8
    return 0;
9
}

von Tom K. (ez81)


Lesenswert?

Für Debug-Augaben ist es wahrscheinlich am sinnvollsten, nach stderr zu 
schreiben: fprintf(stderr, "Ich bin immer sichtbar.");

Man kann den Buffer manuell flushen (fflush) oder ganz abschalten ( 
setbuf ), wobei letzteres bei Programmen, die viel ausgeben, die 
Performance verhagelt.

Das Beispiel
1
#include <stdio.h>
2
int main(void)
3
{
4
    setbuf(stdout, NULL);
5
    for (int i = 0; i < 5000000; ++i)
6
        printf("%d ", i);
7
}
ist bei Umleitung in eine Datei ( ./a.out > viele_zahlen.txt ) ohne das 
setbuf auf meinem PC um den Faktor 10 schneller.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.