K
orderline schrieb:
Ich habe es gerade getestet.
Es funktioniert auch, aber der "Rest" ist halt die korrekte Schreibweise für den Cast, oder?
Wenn du es nicht ausschreibst macht wohl der Compiler den Cast.
Ob der dann jetzt nur zufällig richtig ist oder ob er das merkt was du eigentlich willst kann ich aber auch nicht beantworten.
Es ist sogar eher schädlich, wenn du so einen unnötigen Cast hinschreibst. Beispiel:
int add(int a, int b)
{
return a+b;
}
int main(void)
{
int (*fp)(int,int);
fp = add;
return add(5,-5);
}
Ändert man jetzt die Signatur von add:
long add(long a, long b)
{
return a+b;
}
int main(void)
{
int (*fp)(int,int);
fp = add; // <-- wird das hier nicht mehr kompilieren
return add(5,-5);
}
was auch gut so ist. Baust du da noch einen Cast ein:
long add(long a, long b)
{
return a+b;
}
int main(void)
{
int (*fp)(int,int);
fp = (int(*)(int,int)) &add; // <-- wird das hier kompilieren
return add(5,-5); // <-- und das hier undefiniertes Verhalten hervorrufen.
}
Es kompiliert dann zwar, ist aber falsch, weil die Typen gar nicht zusammen passen. Da wär mir ein Fehler beim Kompilieren lieber, statt zur Laufzeit undefiniertes Verhalten hervorzurufen.