1. Лучший говнокод

    В номинации:
    За время:
  2. C++ / Говнокод #8220

    +1007

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    template <typename T, typename U>
    auto operator()(T&& t, U&& u) const
    -> decltype(forward<T>(t) + forward<U>(u)) {
        return forward<T>(t) + forward<U>(u);
    }

    ohlol, 17 Октября 2011

    Комментарии (83)
  3. Си / Говнокод #5186

    +125

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    int function(void) {
        static int i, state = 0;
        switch (state) {
            case 0: /* start of function */
            for (i = 0; i < 10; i++) {
                state = 1; /* so we will come back to "case 1" */
                return i;
                case 1:; /* resume control straight after the return */
            }
        }
    }

    Нестандартное применение свитча.
    Тут оно нафиг не нужно.
    Источник: http://www.gamedev.ru/code/forum/?id=142536

    TarasB, 09 Января 2011

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

    +175

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    string user="Администратор";
        char* qwe1;
        int i=0;
        for(i=0;user[i]!=0;i++){};
        qwe1[]=new char[i];
        for(int j=0;user[j]!=0;j++)qwe1[j]=user[j];

    перевод std::string в массив чаров

    niXman, 30 Октября 2010

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

    +170

    1. 1
    const volatile void

    Тибетская философия С++. Постоянная изменчивая пустота.

    Говногость, 20 Июня 2010

    Комментарии (83)
  6. Pascal / Говнокод #3143

    +102

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    // тут обычный паскалевский код...
    if x > y then asm // если икс больше игрека
      mov eax, x  // то меняем их значения местами
      mov edx, y
      mov x, edx
      mov y, eax
    end;

    Как поменять значения двух целочисленных переменных, не заводя третью? Года 3 назад я делал примерно так.

    TarasB, 01 Мая 2010

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

    0

    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
    // https://github.com/AlexCeleste/C99-Lambda
    // # C99-Lambda: nested functions, lambdas, and closures, in ISO C99
    
    // https://github.com/AlexCeleste/C99-Lambda/blob/57583080392d5f3f626034bbb3292eb0070ba304/c_lambda.h#L110
    // Internal lambda builder functions
    
    #define FN_8CL_ARG_TYPE(T) , T
    
    #define FN_8FEXP(call, p, f, R) { FN_8GETTYPE_8fn f = fn f; call(M_ID p M_IF(M_2ORMORE R, (_fun, M_REST_ R), (_fun))); }
    #define FN_8CLEXP(call, p, c, R) { void * _fun = cl c; call(M_ID p M_IF(M_2ORMORE R, (_fun, M_REST_ R), (_fun))); }
    
    #define FN_8EMIT_NS(N, H, B, Q) FN_8EMIT_NS_((FN_8GET_NL(N, B)), H, (M_ZIP_W2(FN_8EMIT_ELEM, B, M_ILIST)), Q)
    #define FN_8EMIT_NS_(NL, H, BL, Q) (8ZIPNE,(NL, BL, Q), FN_8EMIT_BODY(NL, H, BL))
    
    #define FN_8GET_NL(N, B) M_ZIP_W2(FN_8GET_NL_1, M_ENLIST(_8anon_##N##_, M_NARGS B), M_ILIST)
    #define FN_8GET_NL_1(A, B) , M_CONC_(A, B)
    #define FN_8EMIT_BODY(NL, H, BL) M_ID H M_ZIP_WITH(FN_8EMIT_BLOCK, BL, NL)
    
    #define FN_8EMIT_ELEM(E, _) ,M_CONC_(FN_8EMIT_, E)
    #define FN_8EMIT_8blk(...) (1, 0, __VA_ARGS__)
    #define FN_8EMIT_8fn(...) (0, 0, __VA_ARGS__)
    #define FN_8EMIT_8cl(...) (0, 1, __VA_ARGS__)
    #define FN_8EMIT_BLOCK(P, N) M_IF(M_FIRST P, (M_REST2 P), (FN_8EMIT_NAME((M_REST P, r, a, o), N)))
    #define FN_8EMIT_NAME(P, N) M_IF(M_FIRST P, (FN_8EMIT_CL(N, M_ID P)), (N))
    #define FN_8EMIT_CL(...) FN_8EMIT_CL_(__VA_ARGS__)
    #define FN_8EMIT_CL_(n, _, r, a, o, ...) (void*)&(struct n##_env_t){ \
      n,sizeof(struct n##_env_t) M_FOR_EACH(FN_8CL_SND, M_ID o) }
    #define FN_8CL_SND(P) , M_REST_ P
    
    #define FN_8EMIT_ENV(E, Q) (8DO_Q, (Q), FN_8EMIT_ENV_(E))
    #define FN_8EMIT_ENV_(n, rt, a, o) struct n##_env_t { \
      FN_8CTYPE(rt, n, a, _fun); size_t _size; M_FOR_EACH(FN_8FLDS, M_ID o) };
    #define FN_8FLDS(F) M_FIRST_ F M_REST_ F;
    #define FN_8CL_DEC(rt, n, a) static rt n(void * _envV, M_ID a) { struct n##_env_t * _env = _envV; 
    
    #define FN_8FTYPE(rt, C, a, pn) rt(* C pn)a
    #define FN_8CTYPE(rt, n, a, pn) rt(* pn)(void *, M_ID a)
    #define FN_8FN_TYPE(F) M_CONC(FN_8GETTYPE_, M_FIRST(M_REST((F))))
    #define FN_8GETTYPE_8fn(rt, a, ...) rt(* _fun)a
    #define FN_8CLSZ(T, N) T M_CONC(_, N);
    
    #define FN_8ZIPNE(NL, BL, Q) (8FLTNE, ((M_ZIP_W2(FN_8ZIPNE_, NL, BL)), Q))
    #define FN_8ZIPNE_(N, B) ,(M_FIRST_ B, N, M_REST_ B)
    
    #define FN_8FLTNE(EL, Q) (8POPEM, ((0 M_FOR_EACH(FN_8FLTNE_, M_ID EL)), Q))
    #define FN_8FLTNE_(E) M_IF(M_FIRST_ E, (), (,(M_REST_ E)))
    
    #define FN_8POPEM(FL, Q) M_IF(M_2ORMORE(M_ID FL), ((8F2NS, ((M_REST_ FL), Q))), ((8DO_Q, (Q))))
    
    #define FN_8F2NS(FL, Q) (8DO_Q, ((M_FOR_E2(FN_8F2NS_1, M_ID FL), M_ID Q)))
    #define FN_8F2NS_1(F) ,FN_8F2NS_2 F
    #define FN_8F2NS_2(n, isC, rt, a, ...) M_IF(isC, \
      ((8EMIT_NS_NX, (n, (FN_8CL_DEC(rt, n, a)), M_REST(__VA_ARGS__))), (8EMIT_ENV,(n, rt, a, M_FIRST(__VA_ARGS__)))), \
      ((8EMIT_NS_NX, (n, (static rt n a), __VA_ARGS__))))
    
    #define FN_8DO_Q(Q) (M_ID(M_FIRST_ M_FIRST_ Q),(M_ID M_REST_ M_FIRST_ Q, (M_REST_ Q)))
    
    #define FN_8EMIT_NS_NX(...) (8EMIT_NS, (__VA_ARGS__))

    Ммм, дерьмецо

    j123123, 30 Января 2025

    Комментарии (82)
  8. Python / Говнокод #28524

    +1

    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
    def __get_column_names(table: str) -> tuple:
        try:
            with conn:
                cur.execute("SELECT name FROM PRAGMA_TABLE_INFO(?)", (table,))
                column_names = cur.fetchall()
        except Exception as excpt:
            print(excpt)
        column_names = tuple(i[0] for i in column_names)
        return column_names
    
    
    def db_register_user(user_data: types.User):
        """
        SQL запрос для внесения данных о пользователе
    
        Args:
            user_data: telebot User объект, содержащий словарь с параметрами пользователя
        """
        user_data = user_data.to_dict()
        column_names: tuple = __get_column_names('Users')
        user_values = tuple(user_data.get(key) for key in column_names if key in user_data)
        try:
            with conn:
                query = 'INSERT INTO Users cn'.replace('cn', str(column_names))+' VALUES (?,?,?,?,0,3)'
                parameters = (*user_values,)
                conn.execute(query, parameters)
        except Exception as excpt:
            print(excpt)
        conn.close()

    На сколько в такой ситуации .format не безопасен? Идея в том, чтобы не объебошится программисту в коде введя неверное значение колонки. Для этого имена колонок берутся из самой базы (есть мысль ещё и типы брать). Есть вариант реализации получше? Спасибо

    rockkley94, 26 Декабря 2022

    Комментарии (82)
  9. Python / Говнокод #26652

    +1

    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
    from vk_bot.vk_config import GROUP_ID, TOKEN
    import vk_api
    from vk_api.bot_longpoll import VkBotLongPoll, VkBotEventType
    import random
    from vk_bot.db_session import *
    from vk_bot.__all_models import BugReport, Comment
    import datetime
    from vk_bot.vacancies import get_vacancies, ServerError
    
    
    def main():
        global_init("feedback/feedback.sqlite")
        vk_session = vk_api.VkApi(
            token=TOKEN)
        vk = vk_session.get_api()
    
        longpoll = VkBotLongPoll(vk_session, GROUP_ID)
        bot_state = {}
    
        def send_msg(msg):
            vk.messages.send(user_id=event.obj.message['from_id'],
                             message=msg,
                             random_id=random.randint(0, 2 ** 64))
    
        for event in longpoll.listen():
            if event.type == VkBotEventType.MESSAGE_NEW:
                if event.obj.message['from_id'] in bot_state and bot_state[event.obj.message['from_id']]:
                    state = bot_state[event.obj.message['from_id']]
                    if state == 1:
                        send_msg('Спасибо, ваше мнение для нас очень важно.')
                        Comment().new(event.obj.message['from_id'], datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S'),
                                      event.obj.message['text'])
                        bot_state[event.obj.message['from_id']] = 0
                    elif state == 2:
                        BugReport().new(event.obj.message['from_id'], datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S'),
                                        event.obj.message['text'])
                        send_msg('Спасибо за ваш отзыв, мы постараемся исправить проблему в ближайшем будущем.')
                        bot_state[event.obj.message['from_id']] = 0
                    elif state == 4:
                        parameters = [r.strip() for r in event.obj.message['text'].split(',')]
                        try:
                            vacancies = get_vacancies(parameters[0], parameters[1])
                        except ServerError:
                            send_msg('Не удалось получить ответ от сервера, попробуйте позже')
                            bot_state[event.obj.message['from_id']] = 0
                        except Exception:
                            send_msg('Данные введены некорректно, попробуйте заново.')
                            send_msg('Формат: <должность>, <мин. зарплата>')
                        else:
                            if len(vacancies) == 0:
                                send_msg('По данным критериям ничего не найдено')
                            else:
                                vacancy_list = [f"{i}) {v['title']}, {v['salary']}" for i, v in enumerate(vacancies)]
                                send_msg('\n'.join(vacancy_list))
    
                    if bot_state[event.obj.message['from_id']] == 0:
                        send_msg('1 - написать отзыв или предложение\n 2 - сообщить о неправильной работе сайта\n 3 - документация к api\n 4 - посмотреть список доступных вакансий\n иначе напишите сообщение и модератор вскоре на него ответит')
    
                elif event.obj.message['from_id'] not in bot_state:
                    send_msg('1 - написать отзыв или предложение\n 2 - сообщить о неправильной работе сайта\n 3 - документация к api\n 4 - посмотреть список доступных вакансий\n иначе напишите сообщение и модератор вскоре на него ответит')
                    bot_state[event.obj.message['from_id']] = 0
                else:
                    key = event.obj.message['text'][0]
                    if key == '1':
                        send_msg('Пожалуйста, поделитесь вашим мнением по поводу сайта.')
                        bot_state[event.obj.message['from_id']] = 1
                    elif key == '2':
                        send_msg('Пожалуйста, максимально подробно опишите вашу проблему.')
                        bot_state[event.obj.message['from_id']] = 2
                    elif key == '3':
                        send_msg('https://www.youtube.com/watch?v=dQw4w9WgXcQ')
                    elif key == '4':
                        send_msg('Введите название должности и минимальную желаемую зарплату по образцу:<должность>, <мин. зарплата>')
                        bot_state[event.obj.message['from_id']] = 4
                    else:
                        send_msg('Модератор вам скоро ответит, пожалуйста подождите.')
    
    
    if __name__ == '__main__':
        main()

    Код бота поддержки.
    Один из товарищей по проекту ничего в нем не делал,
    а потом чтобы его не выгоняли попросил дать ему хотя бы бота.
    Вот результат.
    Модели и вспомогательные файлы оставлять думаю не имеет смысла, все и так очевидно

    AlexandrovRoman, 13 Мая 2020

    Комментарии (82)
  10. Куча / Говнокод #25722

    0

    1. 1
    2. 2
    Vistefan, пойдёшь дядьку навестить?
    https://habr.com/ru/company/jugru/blog/455936/

    BoeHHblu_nemyx, 16 Июля 2019

    Комментарии (82)
  11. Objective C / Говнокод #24124

    −6

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    + (NSString*)enumToString:(SomeEnum)someEnumValue
    {
    	NSDictionary *strings =
    	@{
    		@(SomeEnumUndefined) : @"Undefined",
    		@(SomeEnumValue1) : @"Value1",
    		@(SomeEnumValue2) : @"Value2",
    		// Ещё 100500 пар
    	};
    
    	return strings[@(someEnumValue)];
    }

    Имена изменены, но смысл понятен. Точнее, непонятен.

    Desktop, 14 Апреля 2018

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