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

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

    +16

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    #include <iostream>
    using namespace std;
    
    struct T{int a;T(){cout<<"T"<<this<<endl;}~T(){cout<<"~T"<<this<<endl;}};
    struct D:public T{int b;D(){cout<<"D"<<this<<endl;}~D(){cout<<"~D"<<this<<endl;}};
    
    int main() {
       T* a = new D[2];
       cout<<"mission failure"<<endl;
       delete[] a;   
       return 0;
    }

    Писал тест специально для Тараса:
    Виртуальный деструктор в базовых классах нужен:
    *Для вызова деструкторов всех потомков. Иногда это не нужно, тк поля структуры тривиальны. Согласен с Тарасом.
    *Для правильного выбора перегруженного оператора delete. Создал одним менеджером памяти, а удалил в другой - это плохо. Но также бывает редко и только в специфичных проектах.
    Но вот то, что демонстрируется в этом примере - думаю чего-нибудь такого создатели той библиотеки, что ковырял Тарас, и опасались.
    Не просто было вызван деструктор только для предков, забыв о деструкторах потомков, но и:
    *Деструктор предков был вызван для this не по тем адресам, где расположены объекты.
    Не удивлюсь, если:
    *В некоторых кулхацкерских реализациях менеджеров памяти будет удален буфер меньшего размера и куча попортится или оставшаяся не удаленная часть массива в куче просто утекет.
    http://liveworkspace.org/code/2X3MR0$8

    LispGovno, 22 Декабря 2012

    Комментарии (48)
  3. Python / Говнокод #12270

    −100

    1. 1
    (lambda x:request.profile.role if request.profile.role!=5 else 4)(request.profile.role)

    хуита, 11 Декабря 2012

    Комментарии (48)
  4. Си / Говнокод #12168

    +140

    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
    #include <stdio.h>
    #include <conio.h>
    #include <stdlib.h>
    #include <string.h>
    #define MAX 100
    int main()
    {
    	do
    	{
    		int i,f,kol,z=1;
    		char s1[MAX],s2[MAX],*ch=" .!?",*s3[MAX];
    		fflush(stdin);
    		do{puts("Vvedite vash text.");
    		gets(s1);}while((s1[0]==' ')||(s1[1]=='\n')||(s1[0]=='\0'));
    		strcpy(s2,s1);
    		s3[0]=strtok(s2,ch);
    		for(i=1;s3[i]=strtok(NULL,ch);i++)
    		    {
    		    }
    		f=i;
    		puts("Otsortirovannue slova.");
    		for(i=0,kol=0;i<f;i++)
    			{
    				if((*(s3[i])=='A')||(*(s3[i])=='a'))
    							{
    								printf("%s ",s3[i]);
    								kol++;
    								z=0;
    				            }
    			}
    		if(z)puts("slov nety. =(");
    		printf("\nKollichestvo slov na 'A' ili 'a': %d",kol);
    		puts("\nvash text.");
    		puts(s1);
    		printf("\n");
    		printf("dlya povtora nathmite lubyi klavishu. dlya vuhoda ESC.\n\n");
    	}
    	while(getch()!=27);
    }

    Моя первая работа) Оцените) Правда я не помню что она делает)

    RaSta-Lion, 21 Ноября 2012

    Комментарии (48)
  5. Си / Говнокод #12133

    +132

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    #define LengthOfArrayInternal(a)(sizeof(a)/sizeof(a[0]))
     
    #define is_array(x) _Generic((x), typeof((x)[0])[LengthOfArrayInternal(x)]:1, default: 0)
     
    #define COMPILE_TIME_ASSERT(expr) char constraint[expr]
     
    #define length_of_array(a) ({COMPILE_TIME_ASSERT(is_array(a)); LengthOfArrayInternal(a)})

    Определение длины массива. gcc и с11 only.
    Говно как известно рождается в споре:
    http://govnokod.ru/12108#comment160631

    LispGovno, 15 Ноября 2012

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

    +35

    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
    // стоит простая задача: удалить все узлы из списка
    // чувак думает, как же ему это реализовать через задницу?
    // и получилось же!
    
    if (link * root = list.get_root()) {
        link * next;
        do {
            next = root->next();
            list.remove(next);
        } while (root = next);
    }
    
    // неужели нельзя вот так, по-простому?
    
    link * node = list.get_root();
    while (node) {
        link * next = node->next();
        list.remove(node);
        node = next;
    }

    alexzak, 11 Сентября 2012

    Комментарии (48)
  7. Куча / Говнокод #11599

    +141

    1. 1
    2. 2
    3. 3
    4. 4
    http://www.ubuntu.com/download/desktop
    1. Открыть страницу в Firefox/Google-Chrome.
    2. Сверху над кнопкой "Download" сменить с 32 бит на 64 бит.
    3. Посмотреть внимательно на URL, откуда будет загружатся имидж.

    Код, который это делает трудно понять без контекста.

    wvxvw, 16 Августа 2012

    Комментарии (48)
  8. Си / Говнокод #11435

    +118

    1. 1
    2. 2
    3. 3
    4. 4
    filename_size = strlen(dest_dir) + strlen(basename) + 6;
        ctx.mtl_file = (char *) malloc(filename_size);
        ctx.obj_file = (char *) malloc(filename_size);
        sprintf(ctx.mtl_file, "%s/%s.mtl", dest_dir, basename);

    Долго соображали, почему вылезает сегфолт во free...

    someone, 18 Июля 2012

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

    +103

    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
    digits n  = reverse $ map (`mod` 10) (takeWhile (/= 0) (iterate (`div` 10) n))
    
    fromDigits l = sum $ zipWith (*) (reverse l) (map (10^) [0..])
    
    isPalindromic x = digits x == (reverse $ digits x)
    
    
    f :: Integer -> [[Integer]] -> [Integer] -> Int -> [[Integer]]
    f x founded lookedup niter 
                      | niter > 50 = [notlychers, [x] ++ lychers ++ lookedup, zs]
                      | nextX `elem` notlychers = [[x] ++ notlychers ++ lookedup, lychers, zs]
                      | nextX `elem` lychers = [notlychers, [x] ++ lychers ++ lookedup, zs]
                      | isPalindromic nextX = [[x] ++ notlychers ++ lookedup, lychers, zs]
                      | otherwise = f nextX founded (x : lookedup) (niter+1)
       where nextX = x + fromDigits (reverse $ digits x)
             notlychers = founded !! 0
             lychers = founded !! 1
             zs = founded !! 2
    
    g :: [[Integer]] -> [[Integer]]
    g founded = f (x-1) [xs, ys, [x-1]] [] 0
     where x  = zs !! 0
           xs = founded !! 0
           ys = founded !! 1
           zs = founded !! 2
    
    gg n = g [[],[],[n+1]]
    
    isLycher n = null $ (gg n) !! 0

    http://projecteuler.net/problem=55
    http://projecteuler.net/thread=55


    >i even haven't understood why it works :(

    TheHamstertamer, 23 Апреля 2012

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

    +1002

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    9. 9
    template<class _CharType>
    bool check_arith(const _CharType* str)
    {
       for(; *str ; ++str)
          for(unsigned long long j = 0x6165696F7579ull; j; j >>= 8)
            if(((j & 0xFF) | 0x20) == (*str | 0x20))
               return true;
       return false; 
    }

    Функция, которая проверяет, есть ли в слове гласные буквы латинского алфавита с учетом регистра.

    gooseim, 15 Марта 2012

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

    +961

    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
    private class LinkedAction
    {
        public Action<Action<bool>> Action { get; set; }
    
        public LinkedAction Next { get; set; }
    
        public void Execute()
        {
            Action(s =>
                {
                    if (s && Next != null) Next.Execute();
                });
        }
    }
    
    private static LinkedAction NewLinkedAction(LinkedAction link, Action<Action<bool>> action)
    {
        return new LinkedAction
        {
            Action = action,
            Next = link
        };
    }
    
    var action = GetCopytoTestActions(parameter)
        .Reverse()
        .Aggregate<Action<Action<bool>>, LinkedAction>(null, NewLinkedAction);
    action.Execute();

    abatishchev, 12 Марта 2012

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