Forum: Compiler & IDEs seltsame Abarbeitung des printf(); ?Hi


von Chris G. (Gast)


Lesenswert?

Hi zusammen,

ich habe hier ein kleines Testprogramm welches folgende Ausgabe liefert: 
komisch!Das ist aber 55

Ich hätte den normales Satz "Das ist aber komisch" erwartet und selbst 
die 55 nicht mehr.
Kann mir einer kurz erklären oder aufs Pferd helfen warum die 
übergebenen Parameter für printf() in dieser Reihenfolge abgearbeitet 
werden?

Das ganze ist ein Code für C++, weil auf dem PC probiert, müsste doch 
aber in unserer AVR-Welt genauso laufen, oder?

Danke danke :)




int test(void);

void _tmain(int argc, _TCHAR* argv[])
{

  printf("Das ist aber %d",test());

}

int test(void){

  printf("komisch!");

  return 55;
}

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Na, bevor Dein printf in main aufgerufen wird, werden erstmal dessen 
Parameter abgearbeitet. Und dazu gehört der Aufruf Deiner Funktion 
"test".

Also ist es doch logisch, daß die zuerst zum Zuge kommt, bevor ihr 
Rückgabewert an das printf in main übergeben werden kann.

von Ralf G. (ralg)


Lesenswert?

Liegt, wie immer, an der Reihenfolge der Funktionsaufrufe und was dort 
gemacht werden soll!

Anweisung printf -> Aufruf von test() -> Test soll "komisch!" schreiben 
und 55 zurückgeben -> Einsetzen des Rückgabewertes von Test -> ...

Edit: zu langsam ...

von Chris G. (Gast)


Lesenswert?

Hey, danke für die schnellen Reaktionen!

Ok, bei Aufruf einer Funktion werden innerhalb der Parameter vorhandene 
Funktionen ausgeführt.

Und die 55 schreibt er hinterher weil eine Dezimalzahl (%d) folgen soll 
und als "Quelle" test() verwendet werden soll, also dessen Rückgabewert?


Aber wenn ich das %d und test() aus dem printf()-Aufruf entferne wie 
hier liefert er nur noch "Das ist aber".
Warum? Führt C in diesem Fall test() nicht mehr beim Funktionsaufruf 
auf, weil er merkt das es innerhalb der Funktion nicht mehr gebraucht 
wird?



int test(void);

void _tmain(int argc, _TCHAR* argv[])
{

  printf("Das ist aber ");

}

int test(void){

  printf("komisch!");

  return 55;
}
Markierten Text zitieren | Antwort |

von Chris G. (Gast)


Lesenswert?

boah sorry, vergesst bitte die letzte Frage :)

nun hab ichs doch geschnallt :)

Vielen Danke für die schnelle Hilfe!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.