1. Список говнокодов пользователя crastinus

    Всего: 14

  2. C++ / Говнокод #14387

    +16

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    #include <iostream>
    
    int main(){
        int std = 10;
        std::cout << std << std::endl;
    }

    crastinus, 19 Января 2014

    Комментарии (56)
  3. Куча / Говнокод #14380

    +125

    1. 1
    http://coliru.stacked-crooked.com/a/a5ba510a2075393f

    Под другим ником опубликовал чуть раньше:
    http://govnokod.ru/12937

    crastinus, 18 Января 2014

    Комментарии (31)
  4. C++ / Говнокод #14300

    +17

    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
    #include <boost/spirit/include/phoenix_fusion.hpp>
    #include <boost/fusion/include/adapt_struct.hpp>
    
    #include <iostream>
    
    
    #define GEN_MACRO_0(X, Y)                             \
        ((X, Y)) GEN_MACRO_1
    #define GEN_MACRO_1(X, Y)                             \
        ((X, Y)) GEN_MACRO_0
    #define GEN_MACRO_0_END
    #define GEN_MACRO_1_END
    
    #define SHOW(name,val)                               \
            std::cout << name << " : " << val ;
    
    #define SHOW_TUPLE(r,_,tupple)                       \
           SHOW( "1st",BOOST_PP_TUPLE_ELEM(2,0,tupple))  \
           SHOW("\t2nd",BOOST_PP_TUPLE_ELEM(2,1,tupple)) \
           std::cout << std::endl;
    #define OUTPUT (ADD_PAREN_1 INPUT,_END) 
    
    
    #define SHOW_NODES(seq)                              \
            BOOST_PP_SEQ_FOR_EACH(SHOW_TUPLE,_,          \
                     BOOST_PP_CAT(GEN_MACRO_0 seq,_END) )
    
    int main() {
        SHOW_NODES(
            ("cock","unskill")
            ("rock","hard")
            ("price","over 100500")
            )
    }

    Годнокодец из boost::fusion.
    http://coliru.stacked-crooked.com/a/c516a67930a9c1a8

    crastinus, 29 Декабря 2013

    Комментарии (42)
  5. C++ / Говнокод #14295

    +18

    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
    #include <iostream>
    
    #define PRINT(val) std::cout << #val \
                                 << " value: " << val \
                                 << " address: " << &val << std::endl; 
    int& constRef(){
        int var = 10;
        PRINT(var)
        return var;
    }
    
    int main() {
       const int a = 'a', b = 'bcde';
       std::cout << a << " " << b << std::endl;
       const int& ref = constRef();  
       PRINT(ref)  
    }

    Малоизвестный синтаксис плюсов.
    1. Инициализация целочисленного значения из строки (используется в строках-классах времени компиляции).
    2. Константная ссылка на стековый объект (используется для создания DSL, в т.ч. boost::spirit).
    P.S.: Более полный вариант со строками лежит на форуме.

    crastinus, 28 Декабря 2013

    Комментарии (303)
  6. C++ / Говнокод #14196

    +9

    1. 1
    #   define BOOST_MPL_AUX_NTTP_DECL(T, x) T x

    Очень интересный стайлгайд Алексей Гуртового

    crastinus, 07 Декабря 2013

    Комментарии (25)
  7. Си / Говнокод #14087

    +108

    1. 1
    assert(buf=malloc(BUF_SIZ));

    А в релизе мы сэкономим памяти

    crastinus, 10 Ноября 2013

    Комментарии (94)
  8. SQL / Говнокод #13925

    −170

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    SELECT id FROM (
                SELECT a.id, b.idNOT FROM stable a
                LEFT JOIN 
                   (SELECT idNOT FROM nottable) b
                   ON a.id = b.idNOT ) fromtable
    WHERE idNOT IS NULL

    SQL Server compact не понимает NOT IN.
    Эквивалент будет:
    SELECT id FROM stable
    WHERE id NOT IN (SELECT idNOT FROM nottable)

    crastinus, 10 Октября 2013

    Комментарии (92)
  9. Куча / Говнокод #13868

    +118

    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
    int function BinarySearch (Array A, int Lb, int Ub, int Key);
      begin
      do forever
        M = (Lb + Ub)/2;
        if (Key < A[M]) then
          Ub = M - 1;
        else if (Key > A[M]) then
          Lb = M + 1;
        else
          return M;
        if (Lb > Ub) then
        return -1;
      end;

    [color=green]Бинарный поиск это поиск, на который затрачивается в 2 раза меньше времени[/green]
    http://algolist.manual.ru/search/bin_search.php

    crastinus, 28 Сентября 2013

    Комментарии (49)
  10. C++ / Говнокод #13851

    +2

    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
    #if defined(_WIN32) || defined(_WIN64)
         size_t size = message.size();
         size_t size_buf = 1015;
    
         size_t pointer = 0;
         for (int i = 0; i < (size/size_buf) + 1 ; i++){
             
             /*Делаем для красивого вывода. Пробел всегда один байт.
              *Потому сматываем указатель буфера до первого пробела.*/
             int buf = size_buf;
             while (message[pointer+buf] != ' ')
                 buf--;
             
             /*Здесь лечится косяк MinGw, буфер принимает по 1к байтов.
              *Лечение производим создавая дополнительные буферы.*/
             istringstream ss(message.substr(pointer,buf) );
             std::cout << ss.rdbuf();
             
             pointer += buf;
         }
    #else
         std::cout << message;
    #endif

    Похоже плохая сборка MinGw.
    http://govnokod.ru/13094

    crastinus, 26 Сентября 2013

    Комментарии (70)
  11. Си / Говнокод #13768

    +129

    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
    60. 60
    61. 61
    62. 62
    63. 63
    64. 64
    65. 65
    66. 66
    67. 67
    68. 68
    69. 69
    70. 70
    71. 71
    72. 72
    73. 73
    74. 74
    75. 75
    76. 76
    77. 77
    78. 78
    79. 79
    80. 80
    81. 81
    82. 82
    83. 83
    84. 84
    #include <stdio.h>
    #include <dlfcn.h>
    #include <getopt.h>
    #include <string.h>
    #include <stdlib.h>
    
    #define int64 long long
    
    const char* help =
    "       -h,--help  это сообщение\
            -f,--func  имя функции\
            -n,--num   количество аргументов функции\
            -a,--arg1  первый аргумент\
            -b,--arg2  второй аргумент";
    
    struct option longopts[] ={
            {"func",1,NULL,'f'},
            {"help",1,NULL,'h'},
            {"num", 1,NULL,'n'},
            {"arg1",1,NULL,'a'},
            {"arg2",1,NULL,'b'},
            {0,0,0,0}
    };
    
    void strtoa(void** arg, char* optarg){
        int tmp;
        char* e;
        tmp = strtol(optarg,&e,10);
        if (e != optarg + strlen(optarg)){
            *arg = malloc(strlen(optarg));
            strcpy((char*)*arg,optarg);
        } else *arg = (void*)tmp;
    
    }
            
    int64 main(int argc, char** argv){
      
      int opt, num = 0;
      void *a,*b;
      char* e;
    
      void* (*func2)(void*,void*), 
            (*func1)(void*), 
            (*func0)(), *func = 0;
      
      while((opt = getopt_long(argc,argv,"f:h:n:a:b:",longopts,NULL)) != -1){
          switch (opt){
              case 'h':
                  fprintf(stderr,"%s",help);
                  exit(0);
              case 'f':
                  func = dlsym(NULL,optarg);
                  break;
              case 'n':
                  num = atoi(optarg);
                  if (num > 2) exit(1);
                  break;
              case 'a':
                  strtoa(&a,optarg);
                  break;
              case 'b':
                  strtoa(&b,optarg);
                  break;
          }
      }
      
      if(func != 0){
          switch (num){
              case 0: 
                func0 = func;
                (*func0)();
                break;
              case 1:
                func1 = func;
                (*func1)(a);
                break;
              case 2:
                func2 = func;
                (*func2)(a,b);
          }
      }
      
      return 0;
    }

    Запускает любую функцию линукс, содержащую до 2-х аргументов. В хелпе все написано. Собирать так c флагом -dl.
    Использовать так:
    a.out -f sleep -n 1 -a 1 - sleep на 1 секунду
    a.out -f printf -n 1 -a OK - выводит без конца строки
    вдохновлен этим:
    http://govnokod.ru/13763

    Я, crastinus97, говорю вам: этого способа нет в man. Я его сам открыл.

    crastinus, 11 Сентября 2013

    Комментарии (26)