Hallo youssef,
was mache ich falsch ?
Ein void* hat ja bekanntlich keinen definierten Datentyp.
Bei den alten C-Compilern wurde kein expliziter Check auf Datenverträglichkeit gemacht, bzw. der Compiler konvertierte das Zeugs einfach wie er es für richtig hielt. Dadurch war es möglich void* einfach irgendeinem Pointer zuzuweisen.
Dieses verhalten führte aber zu bösen Programmfehlern z.B.:
int a;
long b;
a = b;
Kann dann zu „lustigen“ Fehlern führen, wenn der Wert von b grösser ist als MAX-INT.
Mit einem cast:
a = (int)b;
wird das Problem zwar nicht beseitigt, aber der Compiler weiss jetzt, dass du das mit Absicht (Tja oder aus Dummheit) so machen willst und du erhälst keine Fehlermeldung mehr. Zudem ist jetzt das Ganze auch im Source-Code „dokumentiert“ und fällt bei der Fehlersuche eher auf.
Man hat dann ein Zusatzprogramm Namens „Lint“ (Staub) entwickelt, welche solche Fehler, zumindest als Warnung anzeigte.
Mittlerweile ist das alte „Lint“ fest in den Compiler eingebaut, und liefert dir diese Warnung oder Fehler, weil da etwas nicht ganz sauber ist.
MfG Peter(TOO)