Hei, jeg har kommet over en litt rar casting som jeg har problemer med å forstå, så jeg henvender med til freakene for å få en bedre forklaring på dette.
Jeg referer til man-page for C funksjonen dlsym ( ).
Jeg ville ha castet denne som beskrevet øverst:
Hvorfor er dette feil måte å gjøre det på? Da tenker jeg på endringen som er gjort i ISO/IEC 9899:1999 standarden som levner denne "undefined"?
Og hva gjør egentlig denne castingen? Kan noen forklare meg det?
linux.die.net - dlsym man page
Jeg referer til man-page for C funksjonen dlsym ( ).
Sitat av Man - dlsym ()
/* Writing: cosine = (double (*)(double)) dlsym(handle, "cos"); would seem more natural, but the C99 standard leaves casting from "void *" to a function pointer undefined. The assignment used below is the POSIX.1-2003 (Technical Corrigendum 1) workaround; see the Rationale for the POSIX specification of dlsym(). */
*(void **) (&cosine) = dlsym(handle, "cos");
*(void **) (&cosine) = dlsym(handle, "cos");
Vis hele sitatet...
Kode
cosine = ( double ( * )( double )) dlsym ( handle, "cos" );
Og hva gjør egentlig denne castingen? Kan noen forklare meg det?
Kode
*(void **) (&cosine) = dlsym(handle, "cos");