simple frage zu return argc-argc



  • Hallo,

    hier kann man leider irgendwie keine Bilder einbinden. Ich habe aber einen Screenshot von einer Übungsaufgabe aus meinem Studium gemacht. Die Lösung ist mit dabei, die Aufgabe auch nicht groß.
    http://s7.directupload.net/images/140118/8vrnms7u.jpg

    Es ist ja soweit nicht schwer, ich habe blos eine Frage dazu:
    Wieso wird unten als return Wert "argc-argc" angegeben?
    Konnte aus unserem Skript / meiner Literatur dbzgl. leider nichts dazu finden...

    Danke!



  • Im besten Fall wollte damit jemand die mögliche Warnung aufgrund eines unbenutzten Parameters (GCC/Clang: -Wunused-parameter, MSVC: C4100) umgehen.
    Allerdings ist folgendes, meist hinter einem Makro mit einem gut gewählten Namen versteckt, üblicher. Das mag zwar ebenfalls komisch aussehen, aber ein gängiges Idiom.

    int
    main(int argc, char **argv)
    {
      (void)argc;
      // ...
    }
    

    Oder den Leser verwirren, was ja anscheinend funktioniert hat. Oder einfach nur schlau sein. Oder alle drei zusammen!



  • Hi, bin Laie/Neuling, und/aber 'argc-argc;' sollte doch (in jedem Fall) dasselbe sein wie 'return 0;', oder nicht? Habe ich jedenfalls auch noch nie gesehen. ^^


  • Mod

    phf schrieb:

    Hi, bin Laie/Neuling, und/aber 'argc-argc;' sollte doch (in jedem Fall) dasselbe sein wie 'return 0;', oder nicht? Habe ich jedenfalls auch noch nie gesehen. ^^

    Ja, es ist ein umständlcih geschriebenes return 0; . Da wollte sich jemand wahnsinnig cool vorkommen.

    Man kann Funktionsparameter auch weglassen und im Falle der main ist es auch nicht nötig, die Parameter argc/argv zu nennen (das ist nur übliche Konvention). Das sind ganz normale Funktionsparameter wie andere auch:

    int main(int, char *ballaballapingpong[]);  // absolut ok
    

    Es ist natürlich nicht die feine Art, einfach so auf gut Glück auf Arrays zuzugreifen, wenn man nicht weiß, wie groß diese sind. Wenn hier weniger als 3 Kommandozeilenparameter gegeben werden, hat man undefiniertes Verhalten!



  • Das funktioniert aber nur bei Deklarationen (und main wird ja normalerweise nicht deklariert). Bei Definitionen ist es zwar in C++ möglich, jedoch in C nicht.


  • Mod

    EinGast schrieb:

    Bei Definitionen ist es zwar in C++ möglich, jedoch in C nicht.

    Ich muss zugeben, das war mir bisher nicht bekannt. Gut zu wissen.


Anmelden zum Antworten