1. Си / Говнокод #16775

    +120

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    /* 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");

    Сишкопроблемы.

    http://linux.die.net/man/3/dlsym

    Запостил: someone, 28 Сентября 2014

    Комментарии (3) RSS

    • Вот Паскаль — совсем другое дело:
      type tfunc = function (x: double): double; pfunc = ^tfunc;
      ...
      cosine := pfunc(dlsym(handle, 'cos'));
      Сишка не нужна.
      Ответить
    • http://pubs.opengroup.org/onlinepubs/9699919799/functions/dlsym.html говорит что ISO C может идти в жопу:

      "Note that conversion from a void * pointer to a function pointer as in [...] is not defined by the ISO C standard. This standard requires this conversion to work correctly on conforming implementations."

      ну да это не первый раз (и я уверен не последний) где POSIX идиотам из ISO мозги вправляет.
      Ответить
    • показать все, что скрыто
      .         g@@@@@44444*********9444@@@@@@@@@@@Mggg__
      	       g@M"	    _an**"""""""**Vw=G______"%%@@@@@gg_
      	     ,@@`	 a^"  __a=~v-vvv~~,___	       _____`"*@gg_
      	    a@@       _M" _m*"` _______     `""""""""""`    "	"9@g_
      	    @@	    a" ,m"_ar*"'`     -,	 ,amv****-~,	   9@g
      	   @@	     .* u"		C	  ,~	    "\	     @
      	  d@	       '    __gg____		  `		     @y
      	 g@		,g@@@@@@@@4@@gg_	  C   ______	     9@g
             g@@.>~.	   __  a@""@@@@@@__  "9@g	  ,g@@@@**4@@_	      "@g_
           g@"$-*"""	   *Y, @@@@*""**4@@@g__$@C     ggg@@@@@@@@@@*" "'" ""Mg`8@g
         g@",`  ,g@@@@@@@g_	    _g@     ""@M"      `"@@"		    *n_"C"@@
        g@'	 p@"	,`"@@@ggggg@@"			 8]	 ,_  _gM@@@@g ' 'C8@
        @@	j@     8@_    `"""'			 8@g_	 3@g@@@`,  `"	 ][@
        @L	8@  _g@@@@@gg_		    _gMMy	  "9@g_    `""' 8L	 j8@
        @k	3@ d@@@@   "@@@gg_   *""""" @"``___	    '@@g_	@@C  n"  Q@
        "@C $  9k    @@_    "8@@@@gg_     @g_fM4@@M	   g@""" "n.   a@@@  _m*3@"
         "@g N,      9@@gg_  8@ `""9@@@gg__"	       8gg@M	    _g@@@d@k   a@%
          "@@g_'	"@@@@@@@@g_	`"8@@@@ggg____  ""`   ___gg@@@@ 8@@@   @@
            "@g_	 '@g `"@@@@gg__   @L  `"""4@@@@@@@@@@@@@@@@"  @C @@@  3@
      	9@_	  `@g  3@"9@@@@@@g@	   [@	  @@	 4@y  @kg@@@  [@
      	 9@	    8@gd@   '"9@@@@@@@gggggd@gggggd@gggggg@W@@@@@@@@  [@
      	  8g	     "@@g	 @""9@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@F  [@
      	   @g	       "@@g_	d@     '""@@@@@@@@@@@@@@@@@@@@@@@$@   3@
      	   `@g_		 "@@@g_j@'	  @C  ``"3@@"""8@""j@'j@g@@   3@
      	     9@g_ ~__ ~._  `"@@@@g_	  @C	 8@   g@^ p@^ "@@M     @C
      	       "@@g "9m_ "Nq_  "*@@@@ggggg@______@____@@gg@@@@@M"      @L
      		 "9@@g_`"Mm_`"Nq_   """"*4@@@@@@@@@@M@@4*"""'	       8k
      		    "9@@g_ ""Mm_"*w__	    ~~~~ aaa~~	      _/       $@
      		       `"@@gg_  "*WG_"*w~.____		___am*"    /   [@
      			   "*@@gg    `"*-~<.__	       `       __M"    3@
      			       "9@gg_	      `""'** ------**""`       d@
      				  `"@@ggggg__			     ,d@
      				      ""9@@@@@gg__		  __g@"
      					     `""*4@@@@MggggggggM@@@@"
      						     `""""""""""'
      Ответить

    Добавить комментарий