1. C++ / Говнокод #9223

    +148

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    #include <iostream.h>
    
    typedef short *(*bar2)(double);
    
    typedef char *(*bar3)();
    
    typedef long long int **(* bar5)();
    
    typedef bar5 (** bar4)(bar3);
    typedef bar4 (** bar1)(bar2);
    
    
    typedef long long int *(*(*(*(*(**bar0)(short *(*)(double ))))(char *(*)()))());
    
    
    long long int ** func5()
    {
    	static long long int  A = 42;
    	static long long int* B = &A;
    	return &B;
    }
    
    char* func3()
    {
    	return new char;
    }
    
    bar5 func4(bar3 A)
    {
    	return &func5;
    }
    
    short* fun2(double A)
    {
    	return new short;
    };
    
    bar4 fun1(bar2 A){
    	static void* p = &func4;
    	return (bar4)&p;
    }
    
    #pragma argsused
    int main(int argc, char* argv[])
    {
    	void* p = &fun1;
    
    	bar0 foo0 = (bar1)&p;
    	bar1 foo1 = (bar1)&p;
    
    	long long int ** pr1 = (*(*(*foo1)(&fun2))(&func3))();
    	long long int ** pr0 = (*(*(*foo0)(&fun2))(&func3))();
    
    	std::cout<<**pr1<<std::endl;
    	std::cout<<**pr0<<std::endl;
    	std::cin.get();
    
    	return 0;
    }

    разбирался с указателями на функции

    Запостил: sanchousf, 25 Января 2012

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

    • >разбирался с указателями на функции
      А чего с ними разбираться ... http://goo.gl/QJ29
      Ответить
    • > *(*(*(*(*(**
      вот что мне не нравится в Си\СиКрестКрест, так это вот обилие таких смайликов
      Ответить
      • Если так можно писать, еще не значит, что следует. В нормальном коде такого не будет.
        Ответить
      • typedef вроде пока никто не отменял
        Ответить
      • в нормальном коде на С++ обычно проще и гибче тип функции задавать как boost::function<int(long, double)>
        или использовать сразу вариант
        template <class Handler>
        void do_async_call(..., Handler h)
        {
        ....
        h(errcode, 10, var);
        }

        ну а typedef rettype (*functype)(args); оставим для С
        Ответить
      • ага, что то типа
        var ? (var+1):-(var+1);
        Ответить
    • http://dl.dropbox.com/u/5314141/LOL/foo.jpg
      Ответить
    • Крис засмеялся и привлёк меня к себе. Я удобно устроился возле него, положив голову ему на грудь. Мы не заметили, как заснули.
      Ответить

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