warning: subscript has type `char'



  • ...wenn ich den Cast wegnehme kommt die Fehlermeldung aber immer noch...

    if (feld[puffer[i]] != NULL)



  • ist ja nur eine Warnung.

    Aber ich glaube, der will, dass du puffer[i] zu size_t castest



  • Na wunderbar!!! Nun ist die Warnung weg!! War zwar nur eine Warnung...sieht aber dennoch komisch aus...



  • Original erstellt von beni23:
    Na wunderbar!!! Nun ist die Warnung weg!! War zwar nur eine Warnung...sieht aber dennoch komisch aus...

    jup, ist immer wichtig Warnungen auf den Grund zu gehen, oft zeigen sie an, wo
    sich dramatische Fehler verstecken



  • Kannst du einem Anfänger wie mir auch kurz erklären warum zu Teufel man das so machen muss und puffer[i] nach size_t casten muss?



  • weil der operator [] als Parameter ein size_t erwartet, du aber ein char übergibst



  • Der Grund für die Warnung ist folgender:

    Eine Adresse ist länger als ein char. Der Compiler muss zur Laufzeit also den Index i von char auf Pointerlänge (size_t) erweitern. Wenn du gleich den passenden Typ nehmen würdest, wäre dein Programm also kürzer und schneller.

    Das will dir der Compiler mit der Warnung sagen.

    Die Variable nach size_t casten ist natürlich Blödsinn. Dann ist die Warnung war weg, die Situation aber noch da.

    Ein cast löst keine Probleme, sondern macht welche!



  • if ( feld[(char)(puffer[i])] != NULL)
    

    Ich verstehe den Sinn nicht ganz. Wozu castest du auf char?



  • Ok, das wäre wohl nicht nöti. Aber ohne dem (char)-Cast kam die Fehlermeldung auch und da wollte ich auf Nummer sicher gehen...



  • Original erstellt von Geo:
    Ein cast löst keine Probleme, sondern macht welche!

    in diesem Fall ist der cast aber sinnvoll, er zeigt an: ich weiss dass ich einen char als index verwende, und bin mir dessen voll bewusst, also lass mich es so machen.

    dadurch ist die warnung weg -> niemand wird sich mehr gedanken darueber machen, wozu auch? es ist ja alles wie es sein soll.



  • ist casten nicht nur gefaehrlich, wenn man zu einem kleineren Typ castet?



  • Original erstellt von <xyan>:
    ist casten nicht nur gefaehrlich, wenn man zu einem kleineren Typ castet?

    jein.

    casten bedeutet, dass du mehr weisst (oder zu wissen glaubst) als der compiler.

    solltest du wirklich mehr wissen, dann ist es in ordnung.
    solltest du aber nur glauben mehr zu wissen dann gibt es probleme.

    Die meisten casts kann man aber durch besseres code design umgehen...

    in diesem Fall ist der cast OK, da wir mehr wissen als der Compiler (welcher uns ja nur darauf hinweisst, dass wir uU etwas falsch gemacht haben)

    bei einem
    double d=foo();
    int i=d;

    sieht die sache (wie du richtig bemerkt hast) anders aus.
    hier koennten zB nachkommastellen verlorengehen - aber auch hier gilt: wenn wir wissen das dies nicht passiert, bzw. es uns egal ist, dann ist diese zuweisung OK (dies druecken wir durch einen cast aus)


Anmelden zum Antworten