2016-08-16 4 views
2

Wenn ich versuche, die folgenden einfachen Code unter TDM_GCC unter Windows 10, laufenundefined Verweis auf ‚setlinebuf‘

#include<stdio.h> 

int main(){ 

    double input; 

    setlinebuf(stdout); 

    printf("Enter Your Input -"); 
    scanf("%If", &input); 
    printf("ENtered name is %f", input); 

return 0; 
} 

es kompiliert (über gcc) mit einem Fehler, der besagt, dass - nicht definiert Hinweis auf ‚setlinebuf‘ . Ich benutze Setlinebuf, um den Puffer nur Zeilenweise zu haben.

+1

Terminals sind standardmäßig gepuffert, so dass 'setlinebuf (stdout);' nichts wirklich tut, solange Sie die Ausgabe nicht in eine Datei umleiten. –

+0

Sie können 'setlinebuf (stdout)' durch 'setvbuf (stdout, NULL, _IOLBF, BUFSIZ)' ersetzen (indem Sie 'BUFSIZ' möglicherweise durch eine andere Größe ersetzen). Die Windows-C-Laufzeitbibliothek behandelt '_IOLBF' jedoch als vollständig gepuffert, genau wie' _IOFBF'. Für die interaktive Verwendung müssen Sie daher 'ffflush (stdout)' aufrufen, nachdem Sie zur Eingabe aufgefordert wurden, oder alternativ 'stdout festlegen 'über' setvbuf (stdout, NULL, _IONBF, 0) 'ungepuffert zu sein' '. –

Antwort

2

setlinebuf ist eine Nicht-Standard-Funktion, die eine feature macro erfordert.

Feature-Makros schalten Funktionssätze ein, die traditionell in Umgebungen wie Unix verwendet werden, aber nicht den C-Standard erreicht haben.

Fügen Sie die folgende Zeile am Anfang der Codedatei (bevor einschließlich stdio.h) über die Anmeldung der setlinebuf zu wechseln:

#define _BSD_SOURCE 

Beachten Sie, dass das Vorhandensein von optionalen Funktionen nicht zwingend vorgeschrieben ist, so kann es nicht auf Ihrer Plattform verfügbar sein.

+0

Nach dem Einfügen der Zeile #define_BSD_SOURCE vor #include wieder habe ich die gleiche Fehlermeldung nach der Kompilierung - undefined Verweis auf 'setlinebuf' –

+1

Es ist möglich (sogar wahrscheinlich), dass die BSD-Funktionen sind einfach nicht in Windows verfügbar. Warum sollte Microsoft schließlich Unterstützung für alte BSD-Funktionen in seiner libc-Version hinzufügen? –

+0

Hat es etwas mit dem Terminalemulator des Eclipse zu tun, den ich verwende? Ich benutze Eclipse NEON. –