%zu wird nicht unterstützt?



  • Hey, zusammen!

    Habe erst vor kurzem angefangen, mich ins Thema C++ einzulesen, programmiere sowie mit 'CodeBlocks', als auch mit MinGW.

    Jetzt bin ich auf folgendes gestoßen, von keiner Entwicklungsumgebung lässt sich der sizeof()- Operator mit der Formatanweisung %zu kompilieren, lediglich mit Formatzeichen wie %d, %ld, %lld,..

    Also um mein Problem zu verdeutlichen:

    #include <stdio.h>
    
     int main(void) {
    
       printf("int: %zu Bytes\n", sizeof(int));
       printf("long long: %zu Bytes\n", sizeof(long long));
       return 0;
       }
    

    Bei der Ausgabe wird aus %zu jedoch einfach "zu", auch wenn ich mit gcc aus MinGW kompiliere.

    Ersetze ich %zu aber beispielsweise mit %d für die Ausgabe von 'int' , komme ich auf die Ausgabe '4 Bytes'.

    Irgendwas kann da aber nicht richtig sein, es heißt ja nicht umsonst man soll %zu verwenden oder? 🤔

    Danke schon mal für Antworten, verzeit falls es ne doofe Frage ist, bin wie gesagt noch neu in der Thematik 😄

    Lg limit



  • Hast du mal bei den Compiler-Optionen ein paar Warnungen aktiviert? Wenn der Compiler bestimmte Platzhalter nicht kennt, würde er die üblicherweise als Warnungen ausgeben.

    In Codeblocks findest du die unter "Project/Build options". Bei den Compiler-Settings hast du eine Reihe von Checkboxes.



  • Hm, das ist sehr merkwürdig. Das sollte normalerweise funktionieren.

    Google liefert: https://stackoverflow.com/questions/44382862/how-to-printf-a-size-t-without-warning-in-mingw-w64-gcc-7-1
    Es scheint so, als würde es %zu unter MinGW/Windows nicht geben, weil MinGW standardmäßig nur eine C89-Library lädt, die %zu noch nicht kennt. Probiere __USE_MINGW_ANSI_STDIO zu setzen, wie im verlinkten Post beschrieben.

    Die einzig gute Nachricht: wenn du C++ lernen willst (du hast die Frage ja im C++-Bereich gepostet), brauchst du kein printf (und auch kein void in den Klammern hinter main) - denn ansonsten könnte man denken, du würdest in C (ohne ++) programmieren. Nichtsdestoweniger sollte das printf aber natürlich auch mit C++ funktionieren.



  • @It0101
    Danke! Musste bei den Compiler Settings den Haken bei 'Have g++ follow the C++11 ISO C++ language standard [-std=c++11] ' setzen, jetzt funktionierts (:

    @wob
    Danke, werde ich ausprobieren!
    Oh, das mit C++ war keine Absicht, fange jz mal mit C an, aber gut zu wissen (:

    Eine Frage noch, warum ist es so wichtig %zu zu verwenden, wenn ich beispielsweise mit %d auf das selbe Ergebnis komme?

    lg



  • @limitless_66 sagte in %zu wird nicht unterstützt?:

    Habe erst vor kurzem angefangen, mich ins Thema C++ einzulesen

    Wenn du tatsächlich C++ lernen willst, ist das

    @limitless_66 sagte in %zu wird nicht unterstützt?:

    fange jz mal mit C an,

    eine dumme Idee.



  • @limitless_66 sagte in %zu wird nicht unterstützt?:

    @It0101
    Danke! Musste bei den Compiler Settings den Haken bei 'Have g++ follow the C++11 ISO C++ language standard [-std=c++11] ' setzen, jetzt funktionierts (:

    @wob
    Danke, werde ich ausprobieren!
    Oh, das mit C++ war keine Absicht, fange jz mal mit C an, aber gut zu wissen (:

    lg

    Du solltest schon wissen was du lernen willst. Wenn du eigentlich C programmieren willst, ist das Compiler-Setting "c++11" der falsche Weg um deine Probleme zu lösen. Es geht beim Programmieren nicht darum, dass man es irgendwie zum Funktionieren bringt, sondern dass man eine saubere plausible und reproduzierbare Lösung für einen Fehler findet.

    Wenn du C++ programmieren willst, dann wirf "printf" und alle artverwandten Sachen ins Feuer und verwende die entsprechenden C++-Lösungen ( Streams ). Wenn du C programmieren willst, dann ist das "Have g++ follow the C++11 ISO C++" nicht die Lösung, sondern nur Schlamperei.



  • Okay ich gebs ehrlich zu, mir war nicht ganz bewusst, dass C++ wirklich etwas komplett anderes ist, ich dachte eher es wäre eine Art Weiterführung der Programmiersprache C, ich weiß, komme mir jetzt zwar etwas dumm vor, aber zumindest weiß ichs jetzt und bin ja hier um was dazuzulernen.

    Da habt ihr recht, irgendwas kann dann nicht ganz stimmen, werde mir das auch bei CodeBlocks nochmal ansehen.

    Und jetzt mal wirklich bei C bleiben.

    Danke für die Antworten!



  • @limitless_66 sagte in %zu wird nicht unterstützt?:

    ich dachte eher es wäre eine Art Weiterführung der Programmiersprache C, ich weiß, komme mir jetzt zwar etwas dumm vor,

    Leider wird dies von Leuten, die es besser wissen müssten, genau so dargestellt. Die sollten sich dumm vorkommen, nicht jemand, der die Sprachen lernen will.



  • @limitless_66 sagte in %zu wird nicht unterstützt?:

    Und jetzt mal wirklich bei C bleiben.

    Davon rate ich dir dringend ab. Schau dir bitte das Video an zu dem @manni einen Link gepostet hat.