frage zu strcpy und feldgrössen



  • Es ist dann wohl auch nicht ausgeschlossen, dass bei irgendeinem Compiler 1+1 != 2 ist.



  • bei meinem compiler ist 1 + 1 = 2,13 aber durch die Abrundung aufgrund der Integerrechnung ist es wieder 2



  • ich finde, daß die zusätzliche Information (sizeof(char)) einen Code-Leser das lesen erleichtert; und einem auch evt. Fehler erspart.
    Meiner Meinung nach ist jede zusätzliche information an den Compiler und Code-Leser für beide hilfreich.



  • Dann glaubs halt nicht.
    Schau, Bashar und ich können euch zu nichts zwingen - wir können euch nur sagen: so macht man es einfach nicht.

    In einer C Newsgroup, ich weiss jetzt leider nichtmehr welche, wurde mal ne schöne liste geschrieben:
    Wie kennzeichnet man sich als C Lamer?

    Und sizeof char kam darin vor 😉

    malloc(100)

    das sagt -> reserviere platz für 100 chars

    malloc(100 * sizeof char)

    das sagt das selbe

    ich sehe keine zusatzinformation!

    Und warum bei malloc casten böse ist, wurde auch schon oft besprochen... nunja, vielleicht vielleicht wird C einfach nur nichtmehr ernst genommen...



  • Kompromissvorschlag: Schreibt 'char* p = malloc (100 * sizeof *p);'. Das hat den Vorteil, dass man den Typ von p einfach ändern kann, ohne noch an dem sizeof rumdoktorn zu müssen.

    Shade: Jo, hier ist der Cast mal wieder richtig böse, weil der Prototyp fehlt. Naja.



  • 😃 du versuchst krampfhaft dein sizeof(char) zu rechtfertigen

    Da sizeof die größe von Objekten/Typen etc. gemessen in chars zurückgibt, ist das wirklich ziemlich dumm.

    Außerdem kann jeder C Programmierer so etwas lesen und wenn du pech hast wird dein Code langsam, weil dein Compiler hersteller vielleicht sizeof(char) erst zur Laufzeit auflöst.



  • Original erstellt von Daniel E.:
    Kompromissvorschlag: Schreibt 'char p = malloc (100 * sizeof p);'.

    akzeptiert! das schaut zwar nicht schön aus, hat aber sinn.



  • Original erstellt von kingruedi:
    weil dein Compiler hersteller vielleicht sizeof(char) erst zur Laufzeit auflöst.

    Wie soll das denn gehen? Ich kann mir beim besten Willen keine Implementation vorstellen, die irgendeinen sizeof-Ausdruck zur Laufzeit auswertet.

    Denkbar wär höchstens eine nicht wegoptimierte Multiplikation mit 1.



  • das ist genauso möglich, wie ein sizeof(char)!=1 😉

    hast aber recht, die multiplikation mit 1 ist eher denkbar, wollte ihm nur klar machen, dass man dem Compiler nicht möglichst viel überflüssige Informationen geben soll.



  • Original erstellt von kingruedi:
    **das ist genauso möglich, wie ein sizeof(char)!=1 😉
    **

    Der Standard sagt nirgends (soweit ich seh'), dass ein sizeof-Ausdruck konstant sein muss[1]. Sinnvoll ist es aber trotzdem, weil der Rechner sonst solche Späße wie char foo[sizeof bar] erst zur Laufzeit berechnen muss. Ich halte das für nicht wirklich praktisch, aber verboten scheint's nicht zu sein ... Hier vertraut man wieder mal auf die Intelligenz der Compilerbauer und bei Interpretern spielt die Ausführgeschwingigkeit sowieso eine recht untergeordnete Rolle.

    [1]: Mit C99-VLAs geht das auch garnicht.


Anmelden zum Antworten