<stdio.h> statt <iostream> in C++ - Schlechter Stil?

D

Dexter1997

Gast
Hallo Freunde der Sonne,

Haltet ihr es für akzeptabel, wenn ein Programmierer in seinem C++-Quelltext Befehle wie cout und cin meidet, und stattdessen lieber printf- und scanf-Methoden verwendet, oder wird das in C++ immer als schlechter Stil angesehen?
 
Meine Meinung dazu: Die C++/OOP Varianten sind eben die Streams. printf und Co. sind C. Daher ist in C++ <iostream> die "richtige" Variante.

Kann aber natürlich jeder anders sehen...

greetz
hroessler
 
Standardmäßig erwarte ich in C++ die iostream-Bibliothek zu verwenden. So gesehen halte ich auch ein Vermeiden dessen eigentlich schon als schlechten Stil, und systematisches Vermeiden eigentlich als schlicht verfehlend. Und wenn ich an Sicherheit, exceptions etc. denke gibt es hier nebst Stilfragen auch technisch relevante Gründe.
 
Es ist Abwägung, printf ist schnell und kompakt (z.B. für ganz definierte Ausgabe wie %08x). Viele Leute verstehen auf Anhieb, was gewollt ist. Die streams sind da etwas komplizierter, wenn es um die Formatierung geht.

​Persönlich: Wumpe, jeder nach seinem Couleur, aber bitter dann konsistent.
 
Benutz einfach iostream. Da machste schonmal nix falsch, wenn du später an größeren Projekten mitarbeitest :freaky:
 
AW: &lt;stdio.h&gt; statt &lt;iostream&gt; in C++ - Schlechter Stil?

stdio.h hat auch andere Vorteile, z.B. für Übersetzungen mit abweichender Wortstellung.

Ich finde, man sollte beides können und sich dann aber bei jedem Projekt jeweils auf eins konsequent festlegen.
 
Meiner Erfahrung nach ist <iostream> der Standard, den man verwenden sollte solange es keine triftigen technischen Gruende gibt <stdio.h> zu benutzen.
 
Zuletzt bearbeitet:
@m.c.ignaz
Du hast da einen Fehler in der Logik :)

@Dexter
An sich ist es egal. Jedoch verfallen viele Programmierer die fröhlich c-Bibliotheken importieren in einen überwiegend prozeduralen anstatt opbjektorientierten Programmierstil. Die resultierenden Programme sind dann gern nah dran an schrecklich.
Ansonsten mehr eine Stilfrage, aber an sich ist vorgesehen den Import von C Bibliotheken in C++ in der Form zu importieren
#include <cstdio>
Einfach um anzuzeigen, dass es eine C-Bibliothek ist.

http://www.cplusplus.com/reference/cstdio/
 
Zuletzt bearbeitet:
Solange man keinen wirklichen Grund der dagegen spricht hat sollte man iostream nutzen. Formatierung ist garantiert kein wirklicher Grund. Ich würde das sogar eher als ein Grund sehen der dagegen spricht. Die Formatierungen von iostream sind auf jeden Stream anwendbar. Wenn ich nun Sachen im gleichen Format z.B. einmal in eine Datei und einmal auf stdout ausgeben möchte. Brauch ich einfach nur std::ostream als Funktionsparameter und übergebe halt einmal std::cout und einmal std::fstream.
Das Argument "Viele Leute verstehen auf Anhieb, was gewollt ist." ist, naja, ich sag Mal wer C++ kann sollte auch die Formatierungen bei Streams verstehen.^^
 
@Fonce: Geht auch mit fprintf - generische Interfaces gitbt es nicht erst seit c++ ;)

Dexter1997 schrieb:
Haltet ihr es für akzeptabel, wenn ein Programmierer in seinem C++-Quelltext Befehle wie cout und cin meidet, und stattdessen lieber printf- und scanf-Methoden verwendet, oder wird das in C++ immer als schlechter Stil angesehen?
Kommt hatl immer darauf an wofür. Wenn ich ein paar Zahlen in ne Tabelle schreiben will oder sonst bestimmte Anforderungen and die Formatirung habe sind printf und co oft die bessere Lösung.

Für formatierte Ausgaben sind c++ iostreams halt einfach ne Kathastrophe (mit etwas Glück gibts aber bald was besseres in der Standardbibliothek: https://github.com/fmtlib/fmt). Sie haben aber zwei große Vorteile:
- Sicherheit: ein Fehler im Formatstring kann z.B. nicht einfach zu nem pufferüberlauf führen.
- Wenn der aufrufende Code keine präzise Kontrolle über die Formatierung benötigt sind iostreams wesentlich einfach und funktionieren generisch für beliebige (auch komplexe) Objekte:

Code:
stream << foo
funktioniert egal ob foo ein int, double, string, oder irgendeine benutzerdefinierte klasse ist und egal ob stream nun auf die Konsole, eine Datei oder ins Netzwerk schreibt.

Meine Meinung: Man sollte immer das Werkzeug nutzen, mit dem sich die Arbeit am leichtesten erledigen lässt. Meistens sind das std::iostreams (oder eben enie vernünftige externe Bibliothek), aber printf hat (leider) nach wie vor seinen Nutzen.
 
@blöderidiot: Ist natürlich auch eine Option, aber ich perönlich bevorzuge fmt aus drei Gründen:
- Ich mag die Syntax mit den Parametern IN den Klammern der printf Funktion lieber
- Es kompiliert schneller und läuft angeblich auch schneller (https://github.com/fmtlib/fmt#benchmarks).
- Wie schon gesagt besteht die Hoffnung, dass die Bibliothek in den Standard aufgenommen wird und man dann die gleiche Syntax und Funktionsnamen einfach weiter nutzen kann.
 
Zurück
Oben