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

    +53.4

    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
    #include <iostream>
    using namespace std;
    struct CandyBar
    {
      char name[20];
      float weight;
      int energy;
    };
    int main()
    {
      CandyBar * snack = new CandyBar;
      *snack =
      {
        "Moncha Munch",
        2.3,
        350
      };
      cout << "Имя = " << *snack->name;
      cout << "\nМасса = " << (*snack).weight;
      cout << "\nЭнергетическая ценность = " << snack->energy << "\n";
      return 0;
    }

    unnicked, 09 Февраля 2010

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

    +61.9

    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
    //Обьявление класса в хедере с последующей реализацией:
    template<class TConstructStrategy>
    class TClass
    {
    public:
    	TConstructStrategy __ctor;
                      //...Прочие методы...
    };
    
    //...Реализация прочих методов класса...
    
    //================================================================
    
    //Конструктор с переменным числом параметров, типа функтор:
    //Тоесть обьявлено где-то в коде проекта и передаётся, как параметр при конструировании.
    typedef void TConstract(int a);
    template<>
    TClass<TConstract>::TClass(int a)
    {
    	//doing...
    };
    
    int main(int argc, char* argv[])
    {
              //...
              TClass<TConstract> A(5);
              //...
    }

    Это говнокод, но не результат работы над проектом, а результат насмешек над компилятором MSVC 6.0.
    Основано на обявлении типа-функции:
    typedef void TConstract(int a);, но тк конструктор не функция - используется внутренее имя конструктора MSVC6.0:
    void __ctor(void);, согласно которому он всё-таки функция.
    __dtor - "внутренее" имя деструктора, кстати.
    Спалить "секретное" имя обычно можно в сообщениях об ошибках c участием этих имён. При входе в конструктор/деструктор через отладчик под дизасемблером(наверное). В стеке вызовов отладчика(наверное). Наверное ещё как-нибудь, например проходом HEX редактора по экзешнику компилятора и прилижащим dll...
    Итак для обсуждения (хотя и не собираюсь это использовать):
    1)Как ещё, кроме странных пергрузок, представленного выше метода конструктора-функтора, и вызовов типа A.__ctor(); / A.__dtor() это можно использовать?
    2)Какие "скрытые" имена конструкторов/деструкторов у других компиляторов? Я пробовал в MSVC6.0. В MSVS 2008 при первом расмотрении "внутреннее" имя другое и сходу не палится.
    Для примера приведу метод с "обычным" функтором (на самом деле он не самый обычный):

    //Обьявление класса в хедере с последующей реализацией:
    template<class TStrategy>
    class TClass
    {
    public:
    TStrategy func;
    //...Прочие методы...
    };

    //...Реализация прочих методов класса...

    //================================================================

    //Функтор:
    //Тоесть обьявлено где-то в коде проекта и передаётся, как параметр при конструировании.
    typedef void TFunc(void);
    template<>
    void TClass<TFunc>::func(void)
    {
    //doing...
    };
    int main(int argc, char* argv[])
    {
    //...
    TClass<TFunc> A;
    A.func();
    //...
    };

    fake_guest, 05 Февраля 2010

    Комментарии (19)
  3. C++ / Говнокод #2553

    +56.5

    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
    void ff(const TCHAR *curDir)
    {
    	WIN32_FIND_DATA FindFileData;
    	HANDLE hFind;
    	TCHAR cd[MAX_PATH], res[MAX_PATH], dirname[MAX_PATH], filename[MAX_PATH];
    	strcpy_s(cd, MAX_PATH, curDir);
    	strcat_s(cd, MAX_PATH, "\\*.*");
    	hFind = FindFirstFile(cd, &FindFileData);
    	BOOL r = hFind != INVALID_HANDLE_VALUE;
    	while (r) 
    	{
    		r=FindNextFile(hFind, &FindFileData);
    		if (FindFileData.cFileName[0] != '.') try
    		{
    			strcpy_s(cd, MAX_PATH, curDir);
    			strcat_s(cd, MAX_PATH, "\\");
    			strcat_s(cd, MAX_PATH, FindFileData.cFileName);
    			if (!r) // если ссылка последняя смысле handle то записываем имя файла
    				strcpy_s(filename, MAX_PATH, FindFileData.cFileName);
    			if (FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) 
    				ff(cd);
    			else
    			{
    				char* k=NULL;
    				if (!r)
    					k=strstr(filename,FindFileData.cFileName); // проверяем если является имя каталога подстрокой в имени файла хреначим на вывод(при том что ссылка была последней)
    				// смысле на вывод хреначим вот здесь
    				if (k!=NULL)
    				{
    					CharToOem(cd, res);
    					cout<<res<<endl;
    				}
    			}
    		}
    		catch(...) 
    		{
    			cout<<"Can not display file name"<<endl;
    		}
    	} 
    }

    xXx_totalwar, 05 Февраля 2010

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

    +48.3

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    #define begin {
    #define end }
    //....
    #define repeat do{
    #define until(a) }while(!(a))
    // и т.д.

    Боян, конечно, просто вспомнил, глядя на предыдущий говнокод с макросами. Это в институте препод на одной из лекций всерьёз писал на доске.
    Видимо, паскальщик еще советской закалки :)

    GovnocoderJr, 02 Февраля 2010

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

    +144.7

    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
    #include <iostream>
    #define lulz int
    #define lulZ main()
    #define luLz {
    #define luLZ }
    #define lUlz cout
    #define lULz cin
    #define lUlZ ;
    #define LuLZ <<
    #define LuLz >>
    #define LULz =
    #define LULZ +
    #define lolz endl
    lulz lulZ
    luLz
      lulz Lulz lUlZ
      lUlz LuLZ" Смешная сумма " LuLZ lolz lUlZ
        lULz LuLz Lulz lUlZ
      lUlz LuLZ Lulz lUlZ
      lUlz LuLZ" + " lUlZ
    lulz lULZ lUlZ
      lUlz LuLZ "LULZ?" LuLZ lolz lUlZ
      lULz LuLz lULZ lUlZ
      lUlz LuLZ Lulz LuLZ " + " LuLZ lULZ LuLZ " = " LuLZ Lulz + lULZ lUlZ
    luLZ

    "Смешная сумма" (c) автор

    darkcheg, 02 Февраля 2010

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

    +63.8

    1. 1
    const size_t& len() const {return _c_str?_len:*(size_t*)0;} //нах это нужно??

    P.S. А Я САМ НЕ ЗНАЮ ГДЕ ЗДЕСЬ СИ-КРЕСТ-КРЕСТ!!!!1

    GovnocoderJr, 02 Февраля 2010

    Комментарии (14)
  7. C++ / Говнокод #2513

    +55.5

    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
    //------------------------------- COMPARE -------------------------------------
    // Function to compare two strings on a mask, using a question mark and
    // asterisk.Question mark matches any single character. The asterisk matches
    // any signs of a minimum length of zero. maximum length is not limited. Only
    // the next character in the mask has a value when there is a coincidence.
    int compare(const char pat[],const char text[],int rec_ex)
    {
        bool    flag = false;               // flag show if working on "star"
        int     pat_len ,txt_len,           // lehtghs of pattern and text
                flagc,                      // counter and  position i check
                shift=0;                    // shift position
    
        pat_len = (int)strlen(pat);         // get lehtgh of pattern
        txt_len = (int)strlen(text);        // get lehtgh of text
    
        if(rec_ex == 1 || (!pat_len && !txt_len))   // check if have to check some
            return(1);                      // if yes return 1 or if have exit
        else if(rec_ex == pat_len)          // else return 0 becose not check that
            return (0);                     // return 0
    
        for(flagc=0;flagc < pat_len;flagc++)
            if(pat[flagc] == '*' && flagc + 1 == pat_len)
                return(compare(pat,text,1));// end of check return 1
            else if(pat[flagc] == '*')
                flag = true;                // start * compare set flag true
            else if(pat[flagc] != '?')
            {
                if(toupper(pat[flagc]) != toupper(text[flagc+shift]) && !flag)
                    return(compare(pat,text,pat_len));   // bad char and no star
                else if(toupper(pat[flagc]) == toupper(text[flagc+shift]) && flag)
                    flag = false;                   // set flag false position
                else if(toupper(pat[flagc]) != toupper(text[flagc+shift]) && flag)
                    shift++;
            }
            else if(pat[flagc] == '?')
            {                               // check if have ? in star operation
                if(toupper(pat[flagc]) == toupper(text[flagc+shift]) && flag)
                    flag = false;           // set flag false position
                else if(toupper(pat[flagc]) != toupper(text[flagc+shift]) && flag)
                    shift++;                // add one more into shift
            }
        if((flagc+shift < txt_len && !flag) // text have nore chars and
            || (flagc+shift == txt_len +1 && pat[pat_len+1] != '*'))
            return(compare(pat,text,pat_len)); // and next char in pattern no star
        else
            return(compare(pat,text,1));       // end of pattern and text
    
    }

    Вот на после завтра нужно по программированию функцию написать- рекурсивную для сравнения строк по маске.
    Написал :-) якобы рекурсивную функцию :-)

    werd, 01 Февраля 2010

    Комментарии (13)
  8. C++ / Говнокод #2496

    +146.9

    1. 1
    2. 2
    3. 3
    4. 4
    class ToBeOrNotToBe{};
    void distortion(ToBeOrNotToBe...)
    {
    }

    Код компилируется в 2008 MVS

    Barmaglot, 28 Января 2010

    Комментарии (44)
  9. C++ / Говнокод #2494

    +72.4

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    this->pRCH->setChckSize(this->pRCH->getChckSize() + 
    this->pvRP->at(this->pvRP->size() - 1)->getRHBidR()->getRHBSize()
     + sizeof(*this->pvRP->at(this->pvRP->size() - 1)->getRHBidR()->getRHBid()));
    this->pRBCH->setChckSize(this->pRBCH->getChckSize() + 
    this->pvRP->at(this->pvRP->size() - 1)->getRHBR()->getRHB()->getRBSize());

    Автор кода отчаянно доказывал прямоту кода...

    Methos, 28 Января 2010

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

    +923.7

    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
    vector<
    #ifdef O_UNICODE
    wstring
    #else
    string
    #endif
    > get_file_list(
    #ifdef O_UNICODE
    wstring
    #else
    string
    #endif
    dir) {
    	#ifdef O_UNICODE
        wdirectory_iterator
        #else
        directory_iterator
        #endif
    	e;
        vector<
        #ifdef O_UNICODE
        wstring
        #else
        string
        #endif
        > ret;
        for (
        #ifdef O_UNICODE
        wdirectory_iterator
        #else
        directory_iterator
        #endif
    	d(dir); d != e; d++) {
            if (is_directory(d->status())) {
                vector<
                #ifdef O_UNICODE
                wstring
                #else
                string
                #endif
                > tmp = get_file_list(dir +
                #ifdef O_UNICODE
                L
                #endif
                "\\" + d->filename());
                for (unsigned int i = 0; i < tmp.size(); i++)
                    ret.push_back(tmp[i]);
            } else
                ret.push_back(dir +
                #ifdef O_UNICODE
                L
                #endif
                "\\" + d->filename());
        }
        return ret;
    }

    Условная компиляция, однако

    braindead, 28 Января 2010

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