Frage zur Reihenfolge von Ausdrücken in Standardausgabestrings



  • Hi(gh)!

    Ich bin immer noch mit Goll/Grüner/Wiese zugange (keine Sorge, danach kommen Kernighan/Richie, dann steigt das Niveau hoffentlich - und didaktisch ist "Programmieren in C" auch nahrhafter!), jetzt im Kapitel "Ein- und Ausgabe" (S. 263ff)...

    Dieses Programm (S. 270, geringfügig mit zusätzlichem Zeilenumbruch am Ende zwecks besserer Lesbarkeit der Ausgabe modifiziert):

    #include <stdio.h>
    
    int main(void)
    {
      int i = 3;
      float x = 16.5;
      int zahl;
      printf("\n\n");
      /* Fall 1: Formatelemente korrekt */
      zahl = printf("%d %3.1f", i, x);
      printf("\nZahl der geschriebenen Zeichen: %d", zahl);
      printf("\n");
      /* Fall 2: Formatelemente falsch */
      zahl = printf("%d %3.1f", x, i);
      printf("\nZahl der geschriebenen Zeichen: %d\n", zahl);
      
      return 0;
    }
    
    

    sollte eigentlich folgendes ausgeben:

    3 16.5
    Zahl der geschriebenen Zeichen: 6
    0 0.0
    Zahl der geschriebenen Zeichen: 5

    Stattdessen wird aber auch in "Fall 2" die gleiche Ausgabe wie in "Fall 1" angezeigt. Ist im heutigen (bzw. im standardmäßig in gcc eingestellten) C-Standard die Reihenfolge der Ausdrucks-Argumente in printf() frei wählbar? Oder, anders gefragt, welches Standard-Flag muss ich beim Kompilieren setzen, um eine Ausgabe wie im Buch zu erhalten?

    Bis bald im Khyberspace!

    Yadgar



  • Das Buch ist, wie dir bekannt ist, absoluter Schrott.
    Trotzdem bestehst Du darauf, damit immer weiter zu "arbeiten".
    Kein vernünftiger Mensch täte das.
    Aber ein Troll täte das.



  • @caligulaminus sagte in Frage zur Reihenfolge von Ausdrücken in Standardausgabestrings:

    Das Buch ist, wie dir bekannt ist, absoluter Schrott.
    Trotzdem bestehst Du darauf, damit immer weiter zu "arbeiten".
    Kein vernünftiger Mensch täte das.
    Aber ein Troll täte das.

    Auch in Schrott ist hier und da noch Verwertbares zu finden... es ist immerhin mein aktuellstes C-Buch, Kernighan/Richie ist von 1983, behandelt also noch nicht einmal ANSI-C!

    Ein Troll soll ich sein, soso... dann habt mir mich aber noch nicht wirklich trollen sehen!



  • Das Verhalten ist undefiniert, wenn die Argumente nicht zu den Formatangaben passen.

    Davon abgesehen:

    • ich erhalte mit dem gcc in jeder Optimierungsstufe die "Soll"-Ausgabe aus dem Buch
    • ich erhalte außerdem Warnungen über nicht zu den Formatangaben passende Argumenttypen


  • @yadgar sagte in Frage zur Reihenfolge von Ausdrücken in Standardausgabestrings:

    Auch in Schrott ist hier und da noch Verwertbares zu finden

    Du als Anfänger kannst überhaupt nicht beurteilen, was "verwertbar" ist oder nicht.



  • @bashar sagte in Frage zur Reihenfolge von Ausdrücken in Standardausgabestrings:

    • ich erhalte mit dem gcc in jeder Optimierungsstufe die "Soll"-Ausgabe aus dem Buch
    • ich erhalte außerdem Warnungen über nicht zu den Formatangaben passende Argumenttypen

    bei mir ist das mit visual studio 2017 auch so.

    um die frage also zu beantworten: nein die reihenfolge ist nicht frei wählbar und und es gibt auch kein standard-flag, das du da setzen könntest.


Anmelden zum Antworten