CStoll schrieb:
Xin schrieb:
Solange ich dieses System auch verwende ist sie übrigens auch allgemeingültig falsch. Was die Kontrolle angeht, so empfehle Dir den GNU-C++ auszuprobieren. Mit %x mal eben 'nen Zeiger ausgeben geht da nicht, für %x muss der Zeiger erst in ein int konvertiert werden, sonst gibt's Mecker...
...und ja, ich kenne und benutze auch std::string, wo ich sie für passend erachte. ^^
Aber diese Überprüfung durch den Compiler dürfte nur funktionieren, wenn der auch vor Ort sieht, was im Formatstring steht. Aber der Formatstring kann auch aus einer Stringtabelle ausgelesen oder vom Benutzer angefordert werden - und dann ist es zu spät für den Compiler, etwas zu kontrollieren.
(und zur Laufzeit gibt es keine portable Möglichkeit, den Typ und die Anzahl der variablen Argumente zu ermitteln)
Da gebe ich Dir vollkommen recht.
Das Problem kann mit cin/cout nicht passieren. Da ist man auf das festgelegt, was man kompiliert hat.
Holt der Programmierer den Formatstring aus einer Tabelle, so wird er vermutlich einen Grund gehabt haben: ihn offenbar zur Laufzeit wählen zu können. Das birgt ein Fehlerpotential - wie übrigens jeder Algorithmus.
Aber er braucht das halt dynamisch.
Hoffentlich hat er nicht mehr als genau einen Teilstring im Formatstring stehen, sonst wird das bei cin/cout nämlich ein zweidimensionales Array und etwas komplizierter. Kompliziertere Dinge bergen ein höheres Fehlerpotential als einfache. In dem Fall tauschen wir ein einfaches Problem gegen einen aufwendigeren Sourcecode, der entsprechend aufwendiger zu testen ist.
Für den Fall, dass ich was verpasst habe... wo ist jetzt der Vorteil an dem aufwendigeren System?
Wir sitzen alle am Computer. Es gibt kein Schwarz oder Weiß, kein Windows oder Linux, kein cout oder printf. Die Frage ist immer, was wird grade benötigt.
Alles hat seine Daseinsberechtigung, auch wenn's manchem Fan schwerfällt, das entsprechend andere anzuerkennen. Außerdem läßt sich über schwarz und weiß viel besser streiten, als wenn alle den golden Mittelweg nehmen würden, oder?