Frage zu printf()
-
Hi,
ist ein Aufruf von printf() mit zusätzlichen Parametern,
allerdings ohne diese im 1. String anzugeben zulässig oder
führt das zu undefiniertem Verhalten?
(Compiler kann natürlich nicht meckern, direkter
Absturz wird auch nicht verursacht aber man weis ja nie)Beispiel:
printf("Hallo, Welt!", arg1, arg2);
Besten Dank jetzt schonmal für die Antworten.
-
Ist wohl definiert, zumindest in C99:
TC2 7.19.6.1 schrieb:
If the format is exhausted while arguments remain, the excess arguments are
evaluated (as always) but are otherwise ignored.Übrigens:
clerner _) schrieb:
Compiler kann natürlich nicht meckern
Warum denn nicht? Z.B. der gcc:
$ gcc -x c -std=c99 -Wall - #include <stdio.h> int main(void) { int arg1, arg2; printf("Hallo, Welt!", arg1, arg2); } ^D <stdin>: In Funktion »main«: <stdin>:6: Warnung: zu viele Argumente für Format
-
Super, danke für die schnelle Antwort
Eine Frage hätte ich noch, wo hast du denn die Doku her?
Buch/PDF oder gibts da eine website?^^
-
clerner _) schrieb:
Super, danke für die schnelle Antwort
Eine Frage hätte ich noch, wo hast du denn die Doku her?
Buch/PDF oder gibts da eine website?^^Die Doku ist der Standard
. Den Standard willst du in der Regel aber nicht als Doku lesen, sondern bloß als Nachschlagewerk für strittige Fragen .Den Standard gibt's bei der ISO (kostet aber, denn damit verdienen die ihr Geld), man bekommt auch kostenlose Versionen, meistens dann irgendwelche Drafts (d.h. Entwürfe für zukünftige Änderungen), Google hilft dir weiter.
Eine wirkliche Dokumentation findest du hier:
www.cplusplus.de
Das ist zwar für C++, aber enthält natürlich auch die ganzen C Bibliotheken, zumindest C89, C99 ist nämlich kein (offizieller) Teil von C++. Das wird dir aber trotzdem ziemlich viel weiterhelfen. Denk dir einfach das "c" vor dem Namen der Headerdateien weg und ein ".h" hinten dran. Bei den Beispielen auf der Seite ist dies ohnehin schon so und die Beispiele zu C sind auch 100% C, ohne C++.
-
clerner _) schrieb:
Eine Frage hätte ich noch, wo hast du denn die Doku her?
Buch/PDF oder gibts da eine website?^^Versuch mal das:
www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdfDas ist ein Draft vom TC3, sollte in den meisten Fällen ausreichen.
-
Bei Linux stehen die ganzen Funktionen (z.B. printf) auch in den manpages
-
linux_c89 schrieb:
Bei Linux stehen die ganzen Funktionen (z.B. printf) auch in den manpages
Und wer da durchsteigt, versteht auch den Standard.
-
So, war ne Zeitlang abwesend
Also www.cplusplus.com/reference/ kannte ich schon, aber solche
speziellen Sachen werden da leider nicht immer erwähnt.www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf -> Scheint gar nicht
schlecht zu sein, das werde ich mir mal etwas genauer durchlesen.linux_c89 schrieb:
Bei Linux stehen die ganzen Funktionen (z.B. printf) auch in den manpages
Habe bis jetzt fast immer auf Windows getestet, da findet man sowas natürlich
nicht
-
SeppJ schrieb:
Das wird dir aber trotzdem ziemlich viel weiterhelfen. Denk dir einfach das "c" vor dem Namen der Headerdateien weg und ein ".h" hinten dran. Bei den Beispielen auf der Seite ist dies ohnehin schon so und die Beispiele zu C sind auch 100% C, ohne C++.
Inbesondere cmath definiert gegenüber math.h Überladungen für Funktionen, die natürlich unter C nicht definierbar sind, und daher auch nicht vorhanden sind.
statt "long abs(long)" heißt es in C "long labs(long)" usw. Man sollte besser die C Doku nehmen, und nicht die Doku für die C++ Erweiterung der C Bibliothek. Zumal die C STD Bibliothek von C89 zu C99 erweitert wurde.
-
~john schrieb:
SeppJ schrieb:
Das wird dir aber trotzdem ziemlich viel weiterhelfen. Denk dir einfach das "c" vor dem Namen der Headerdateien weg und ein ".h" hinten dran. Bei den Beispielen auf der Seite ist dies ohnehin schon so und die Beispiele zu C sind auch 100% C, ohne C++.
Inbesondere cmath definiert gegenüber math.h Überladungen für Funktionen, die natürlich unter C nicht definierbar sind, und daher auch nicht vorhanden sind.
statt "long abs(long)" heißt es in C "long labs(long)" usw. Man sollte besser die C Doku nehmen, und nicht die Doku für die C++ Erweiterung der C Bibliothek. Zumal die C STD Bibliothek von C89 zu C99 erweitert wurde.Das schöne ist ja, dass die Macher jener Referenz genau daran gedacht haben und dies ausdrücklich erwähnen.
[quote0"www.cplusplus.com"]
In C++, this function is overloaded in <cstdlib>, <complex> and <valarray> (see cstdlib abs, complex abs and valarray abs).[...]
Portability
These overloads of abs are only available in C++.
In C, only the cstdlib version of exists (see cstdlib abs) - fabs can be used instead.[/quote]Mit dem fehlenden C99 hast du natürlich Recht.