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

OP #3663461
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...
#3663507
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren