On Wednesday 01 January 2014 20:46:59 Michael Kerrisk (man-pages) wrote: > --- a/man3/dlopen.3 > +++ b/man3/dlopen.3 > > /* According to the C99 standard, casting 'void *' to a function pointer > as shown above is forbidden. POSIX.1-2003 and POSIX.2008 followed > C99's requirement, and proposed the following workaround: i don't want to be pedantic, buuuuut: - you want to say "ISO C" rather than "C99" - the spec says that it is "undefined behavior" rather than "forbidden" i wonder about deleting the "followed C99's requirement" part. they aren't really following the requirement since (at least 2008) says that it must be supported. the "POSIX.2008" probably should be "POSIX.1-2008". or maybe just change it to "POSIX.1" ? > + *(void **) (&cosine) = dlsym(handle, "cos"); > + > + This (clumsy) cast conforms with C99 and will avoid any compiler > + warnings. might it be worth suggesting a union too ? double (*cosine)(double); union { void *vptr; double (*ptr)(double); } cast; cast.vptr = dlsym(...); cosine = cast.double; i think this also avoids aliasing warnings and works nicely in C++ ? or i could be making this up entirely :). > The 2013 Technical Corrigendum to POSIX.1-2008 (a.k.a. POSIX.1-2013) > improved matters by requiring that conforming implementations support > casting 'void *' to a function pointer. how about adding a comment inside of the man page itself linking to the POSIX pages ? making it visible to end users might be too much, but for people maintaining the comments (i.e. you) would be good. http://pubs.opengroup.org/onlinepubs/009695399/functions/dlsym.html#tag_03_112_08 http://pubs.opengroup.org/onlinepubs/9699919799/functions/dlsym.html#tag_16_96_07 > Nevertheless, some compilers > (e.g., gcc with the '-pedantic' option) may complain about the cast > used in this program. */ three things: - i think the ISO C standard is required to at least emit a warning - i was going to suggest the -pedantic thing :) - seriously, you're using "e.g." after chastising me ? :D -mike
Attachment:
signature.asc
Description: This is a digitally signed message part.