Ich füge nur meine Erfahrung hinzu, ich studiere Computertechnik und sehe, dass die zwei oder drei Professoren, die ich in C habe schreiben sehen, immer malloc casten, aber derjenige, den ich gefragt habe (mit einem immensen Lebenslauf und Verständnis von C), sagte mir, dass es absolut unnötig ist, sondern nur verwendet wird, um absolut spezifisch zu sein, und um die Studenten in die Mentalität zu bringen, absolut spezifisch zu sein. Im Grunde ändert Casting nichts an der Funktionsweise, es tut genau das, was es sagt, es weist Speicher zu, und Casting hat keinen Einfluss darauf, man erhält denselben Speicher, und selbst wenn man ihn versehentlich in etwas anderes umwandelt (und irgendwie Compilerfehler umgeht), greift C auf dieselbe Weise darauf zu.
Edit : Das Casting hat einen gewissen Sinn. Wenn Sie die Array-Notation verwenden, muss der erzeugte Code wissen, wie viele Speicherplätze er vorrücken muss, um den Anfang des nächsten Elements zu erreichen, dies wird durch Casting erreicht. Auf diese Weise weiß man, dass man bei einem double um 8 Bytes weitergeht, bei einem int um 4 Bytes usw. Bei der Zeiger-Notation hat dies keine Auswirkungen, bei der Array-Notation ist es jedoch notwendig.
35 Stimmen
stackoverflow.com/q/7545365/168175
9 Stimmen
Gussformen sind böse. Ich sehe so viele Abdrücke im Code, die nur das Ergebnis einer schlechten Programmierpraxis sind. Wann immer Sie einen Cast einfügen müssen, sollten Sie sich als erstes fragen, was hier falsch ist. Ist alles so deklariert, wie es sein sollte? Wenn ja, wäre kein Cast erforderlich, also ist etwas falsch deklariert. Wenn Sie wirklich etwas auf niedriger Ebene mit einzelnen Bytes in einem int oder so tun müssen, ziehen Sie eine Union in Betracht, um auf sie zuzugreifen. Das wird sie genau richtig deklarieren. Als Faustregel gilt: Fügen Sie sie nicht ein, es sei denn, der Compiler beschwert sich. Dann vermeiden Sie sie. Dieses Beispiel wird sich nicht beschweren. void pointer wird zu jedem Typ promoten.
2 Stimmen
@HansLepoeter in C++ sind diese für malloc erforderlich, was meine Vermutung stützt, dass damit etwas nicht stimmt