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

    +3

    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
    class Int {
      int * i;
    public:
      Int(int j = 0):i(new int(j)){}
      int* pointer(){return i;}
      int& value(){return *i;}
      ~Int(){delete i; i = nullptr;}
    
    };
    int& operator*(shared_ptr<Int>& i) {
      return i->value();
    }
    int* operator&(shared_ptr<Int>& i) {
      return i->pointer();
    }
    
    int main() {
      shared_ptr<Int> k(new Int(16));
      *k = 64;
      return *k;
    }

    Этот код по-видимому является проявлением сразу двух синдромов - ООП головного мозга и shared_ptr головного мозга. А ещё const'ов не хватает.

    gammaker, 02 Ноября 2016

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

    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
    /*
     * Copyright (C) 2013 The Android Open Source Project
     * Copyright (C) 2013 The CyanogenMod Project
     *
     * Licensed under the Apache License, Version 2.0 (the "License");
     * you may not use this file except in compliance with the License.
     * You may obtain a copy of the License at
     *
     *      http://www.apache.org/licenses/LICENSE-2.0
     *
     * Unless required by applicable law or agreed to in writing, software
     * distributed under the License is distributed on an "AS IS" BASIS,
     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     * See the License for the specific language governing permissions and
     * limitations under the License.
     */
    
    ...
    
    int
    healthd_board_battery_update(struct android::BatteryProperties *props)
    {
        // don't log to kernel
        return 1;
    }

    RandomTrash, 01 Ноября 2016

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

    +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
    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
    #include <iostream>
    
    #define GAY(x) #x
    #define STR(x) GAY(x)
    
    #define A0(x, i) (i)*10 + (*(x)-'0')
    #define A1(x, i) (*(x + 1) ? A0(x + 1, (i) * 10 + *(x)-'0') : (i) * 10 + *(x)-'0')
    #define A2(x, i) (*(x + 1) ? A1(x + 1, (i) * 10 + *(x)-'0') : (i) * 10 + *(x)-'0')
    #define A3(x, i) (*(x + 1) ? A2(x + 1, (i) * 10 + *(x)-'0') : (i) * 10 + *(x)-'0')
    #define A4(x, i) (*(x + 1) ? A3(x + 1, (i) * 10 + *(x)-'0') : (i) * 10 + *(x)-'0')
    #define A5(x, i) (*(x + 1) ? A4(x + 1, (i) * 10 + *(x)-'0') : (i) * 10 + *(x)-'0')
    #define A6(x, i) (*(x + 1) ? A5(x + 1, (i) * 10 + *(x)-'0') : (i) * 10 + *(x)-'0')
    #define A7(x, i) (*(x + 1) ? A6(x + 1, (i) * 10 + *(x)-'0') : (i) * 10 + *(x)-'0')
    #define A8(x, i) (*(x + 1) ? A7(x + 1, (i) * 10 + *(x)-'0') : (i) * 10 + *(x)-'0')
    #define A9(x, i) (*(x + 1) ? A8(x + 1, (i) * 10 + *(x)-'0') : (i) * 10 + *(x)-'0')
    #define A10(x, i) (*(x + 1) ? A9(x + 1, (i) * 10 + *(x)-'0') : (i) * 10 + *(x)-'0')
    #define A11(x, i) (*(x + 1) ? A10(x + 1, (i) * 10 + *(x)-'0') : (i) * 10 + *(x)-'0')
    #define A12(x, i) (*(x + 1) ? A11(x + 1, (i) * 10 + *(x)-'0') : (i) * 10 + *(x)-'0')
    #define A13(x, i) (*(x + 1) ? A12(x + 1, (i) * 10 + *(x)-'0') : (i) * 10 + *(x)-'0')
    #define A14(x, i) (*(x + 1) ? A13(x + 1, (i) * 10 + *(x)-'0') : (i) * 10 + *(x)-'0')
    #define A15(x, i) (*(x + 1) ? A14(x + 1, (i) * 10 + *(x)-'0') : (i) * 10 + *(x)-'0')
    
    
    #define STOI(x) A15(STR(x), 0)
    
    
    int main(int argc, char *argv[])
    {
        std::cout << STOI(01) << std::endl <<
                              STOI(08) << std::endl <<
                              STOI(0123) << std::endl <<
                              STOI(0123456789) << std::endl;
    
        return 0;
    }

    Теперь можно добавлять нолики в начало чисел для выравнивания!

    gost, 27 Октября 2016

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

    +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
    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
    85. 85
    86. 86
    87. 87
    88. 88
    89. 89
    90. 90
    91. 91
    92. 92
    93. 93
    94. 94
    #define BOOST_TEST_MODULE trololo
    #include <boost/test/included/unit_test.hpp>
    using namespace std;
    
    std::string gen(size_t l, int s = 1, int r = 10/*'\253'*/)
    {
      std::string res;
      res.reserve(l);
      for (size_t i = 0; i < l; ++i)
        res.push_back(/*'\1'*/'0' + (char)((i + s) % r));
      return res;
    }
    
    std::string readl(std::istream& st, size_t l, bool human = false)
    {
      std::string res(l, '\0');
      st.read((char*)res.data(), l);
      res.resize((size_t)(st.gcount()));
      if (human)
        return "'" + res + "'";
      else
        return res;
    }
    
    void sp(std::iostream& st, size_t pos)
    {
      st.seekp(pos);
      st.seekg(pos);
    }
    
    std::shared_ptr<std::iostream> makeStream(size_t bufSize = 8)
    {
      (void)bufSize;
      return std::make_shared<std::stringstream> (std::ios::in | std::ios::out | std::ios::binary);//comment it
      auto r = std::make_shared<std::fstream>();
      r->open("test.txt", std::fstream::in | std::fstream::out | std::fstream::binary | std::fstream::trunc);
      return r;
    }
    
    BOOST_AUTO_TEST_CASE(cross)
    {
      auto ss_=makeStream();
      auto& ss = *ss_;
      ss << gen(11);
      BOOST_REQUIRE((readl(ss, 11) == gen(11)));
      ss << gen(11);
      sp(ss, 0);
      BOOST_REQUIRE((readl(ss, 11) == gen(11)));
      sp(ss, 11);
      BOOST_REQUIRE((readl(ss, 11) == gen(11, 11)));
      BOOST_REQUIRE((readl(ss, 1) == std::string()));
      BOOST_REQUIRE(ss.eof());
      ss.clear();
      BOOST_REQUIRE(!ss.eof());
      sp(ss, 0);
      BOOST_REQUIRE((readl(ss, 0) == std::string()));
      BOOST_REQUIRE(!ss.eof());
      ss << std::string();
      BOOST_REQUIRE(!ss.eof());
      BOOST_REQUIRE((readl(ss, 0) == std::string()));
      sp(ss, 0);
      BOOST_REQUIRE((readl(ss, 100500) == gen(11) + gen(11)));
    }
    
    BOOST_AUTO_TEST_CASE(full)
    {
      auto ss_ = makeStream();
      auto& ss = *ss_;
      ss << gen(8);
      BOOST_REQUIRE((readl(ss, 8) == gen(8)));
      ss << gen(11);
      BOOST_REQUIRE((readl(ss, 11) == gen(11)));
      sp(ss, 0);
      BOOST_REQUIRE((readl(ss, 100500) == gen(8) + gen(11)));
    }
    
    BOOST_AUTO_TEST_CASE(parts)
    {
      auto ss_ = makeStream();
      auto& ss = *ss_;
      ss << gen(6);
      BOOST_REQUIRE((readl(ss, 6) == gen(6)));
      ss << gen(8);
      BOOST_REQUIRE((readl(ss, 8) == gen(8)));
      ss << gen(8);
      BOOST_REQUIRE((readl(ss, 8) == gen(8)));
      sp(ss, 0);
      BOOST_REQUIRE((readl(ss, 100500) == gen(6) + gen(8) + gen(8)));
    }
    
    BOOST_AUTO_TEST_CASE(seek)
    {
      auto ss_ = makeStream();
      auto& ss = *ss_;

    BOOST_REQUIRE((ss.tellg() == streampos(0)));
    BOOST_REQUIRE((ss.tellp() == streampos(0)));
    ss << gen(11);
    BOOST_REQUIRE((ss.tellg() == streampos(0)));
    BOOST_REQUIRE((ss.tellp() == streampos(11)));
    BOOST_REQUIRE((readl(ss, 100500) == gen(11)));
    BOOST_REQUIRE((ss.tellg() == streampos(-1)));
    BOOST_REQUIRE((ss.tellp() == streampos(-1)));
    BOOST_REQUIRE(ss.eof());
    ss.clear();
    BOOST_REQUIRE(!ss.eof());
    BOOST_REQUIRE((ss.tellg() == streampos(11)));
    BOOST_REQUIRE((ss.tellp() == streampos(11)));
    ss.seekg(11);
    ss.seekp(11);
    BOOST_REQUIRE((ss.tellg() == streampos(11)));
    BOOST_REQUIRE((ss.tellp() == streampos(11)));
    ss << gen(11,12);
    BOOST_REQUIRE((ss.tellg() == streampos(11)));
    BOOST_REQUIRE((ss.tellp() == streampos(11*2)));
    BOOST_REQUIRE((readl(ss, 11) == gen(11,12)));
    BOOST_REQUIRE((ss.tellg() == streampos(11 * 2)));
    BOOST_REQUIRE((ss.tellp() == streampos(11 * 2)));
    ss.seekg(5);
    BOOST_REQUIRE((ss.tellg() == streampos(5)));
    BOOST_REQUIRE((ss.tellp() == streampos(11*2)));
    BOOST_REQUIRE((readl(ss, 11) == gen(11, 6)));

    }

    Набил я значит юниттестик длякод на STL. Скорее всего код не верен, скорее всего я что-то не знаю, только вот не пойму в чём дело я что-то. :(

    http://rextester.com/LVWJU36102
    Вот этот вот код тест успешно проходит. Но стоит лишь закоментировать строку, оканчивающуюся на //comment it
    Тест тут же фейлится:
    http://rextester.com/NOSCE43184
    Комментируя эту строку ты заменяешь stringstream на fstream.
    Вот интересно мне, почему вдруг тест перестает работать?
    Что я не так делаю?

    laMer007, 25 Октября 2016

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

    +4

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    #if !defined(COMPILER_MSVC)
    #define ARRAYSIZE(a)              \
        ((sizeof(a) / sizeof(*(a))) / \
        static_cast<size_t>(!(sizeof(a) % sizeof(*(a)))))
    #endif

    https://github.com/tensorflow/tensorflow/blob/754048a0453a04a761e112ae5d99c149eb9910dd/tensorflow/stream_executor/platform/port.h#L42-L46


    Суть этого говновыражения !(sizeof(a) % sizeof(*(a))) судя по всему в том, чтоб оно становилось нулем, если по каким-то причинам размер массива оказывается не кратен размеру элемента этого массива. И тогда эта макропоебень развернется в деление на ноль. Но как такое вообще может быть?

    j123123, 25 Октября 2016

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

    +2

    1. 1
    std::unique_lock<decltype(_settingsGuard)> _settingsGuard;

    laMer007, 23 Октября 2016

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

    −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
    Graphics::Graphics(const Window& window, int virtualWidth, int virtualHeight) :
        sdlRenderer{[&window]{
            SDL_Renderer* const sdlRenderer = ::SDL_CreateRenderer(const_cast<SDL_Window*>(window.getSdlWindow()),
                        -1, SDL_RENDERER_ACCELERATED);
            if (!sdlRenderer)
                throw std::runtime_error{::SDL_GetError()};
    
            return sdlRenderer;
    
        }(), ::SDL_DestroyRenderer}
    {
        if (::SDL_RenderSetLogicalSize(sdlRenderer.get(), virtualWidth, virtualHeight) < 0)
            throw std::runtime_error{::SDL_GetError()};
    }

    jangolare, 22 Октября 2016

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

    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
    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
    // Этот код отрабатывает при старте программы.
    // Он запускает некоторое количество потоков
    
    for (int ThrNum=0; ThrNum<=(MAX_THREADS-1); ThrNum++){ // threads loop
    DWORD ThreadID;
    hEventsArrayRdy[ThrNum] = CreateEvent(NULL,TRUE,FALSE,NULL);
    hEventsArrayRqst[ThrNum] = CreateEvent(NULL,TRUE,FALSE,NULL);
    hThreadArray[ThrNum] = CreateThread(NULL,0,RuskThrdFunc1,0,0,&ThreadID);
    }
    
    
    
    
    
    // Вот эта радость основная функция, которую движок запускает на n потоков. Скажем, на 16.
    // Тут поток ожидает команды на выполнение полезной нагрузки
    // И здесь же ставит флаг о том, что полезная нагрузка выполнена.
    // Как видно, он ищет еще не занятую область экрана после того, как отработал предыдущую.
    
    DWORD WINAPI RuskThrdFunc1( LPVOID lpParam ){    // standart function for one thread
    int THRD_num,RunNew,ScrAr;
    AvoidWarn=lpParam;                               // warning avoid
    // > detect thread num
    EnterCriticalSection(&RuskMTSec);                // enter to critical section
    ThreadNumb++;THRD_num=ThreadNumb;                // for thread num detect
    LeaveCriticalSection(&RuskMTSec);                // leave critical section
    // < detect thread num
    // > main thread wait time
    more:;
    DWORD dwWaitResult = WaitForSingleObject(hEventsArrayRqst[THRD_num],INFINITE); // wait for request
    if (dwWaitResult==WAIT_OBJECT_0){                // request is correct, so start it realization
    ResetEvent(hEventsArrayRqst[THRD_num]);          // no more wait for request
    // < main thread wait time
    //
    //
    // >> main calculation
    goto startcalc;                                  // jump to entry point
    calcmore:;
    //    > calculate calls
    if (GlThr_RequestId==THREQ_3dbasil){rusk.B3D_putThrds(SCRARMT,RunNew);} // __ put all =3d-basil= direct
    if (GlThr_RequestId==THREQ_gingerbr){rusk.GBputThrds(SCRARMT,RunNew);}  // __ put all =gb system= pics
    if (GlThr_RequestId==THREQ_user01){rusk.User01Mult(SCRARMT,RunNew);}    // __ request for user 01 private multithr func
    //    < calculate calls
    //    > search for uncalculated screen area
    startcalc:;
    EnterCriticalSection(&RuskMTSec);                // enter to critical section
    RunNew=-1;                                       // no screen part for calculate by default
    for (ScrAr=0; ScrAr<SCRARMT; ScrAr++){           // loop all screen parts
    if (ScrAreaReq[ScrAr]==0){ScrAreaReq[ScrAr]=1;RunNew=ScrAr;break;} // find next free area for calculating it
    }
    LeaveCriticalSection(&RuskMTSec);                // leave critical section
    if (RunNew>=0){goto calcmore;}                   // screen area for calculating is found
    //    < search for uncalculated screen area
    // << main calculation
    //
    //
    // > put rdy signal and go to wait time
    SetEvent(hEventsArrayRdy[THRD_num]);             // set flag, that request is done
    }
    goto more;                                       // go to wait for next request
    // < put rdy signal and go to wait time
    return 0;
    }
    
    
    
    
    
    // А вот так движок посылает сигнал всем запущенным потокам, что пора просыпаться и работать.
    // Здесь же движок ожидает завершения работы всех потоков.
    
    GlThr_RequestId=THREQ_3dbasil;                   // request id for threads
    for (int ScrAr=0; ScrAr<SCRARMT; ScrAr++){ScrAreaReq[ScrAr]=0;} // ini screen areas flags
    for(int i=0; i<=(MAX_THREADS-1); i++){SetEvent(hEventsArrayRqst[i]);} // request all theads to calculate
    WaitForMultipleObjects(MAX_THREADS, hEventsArrayRdy, TRUE, INFINITE); // wait for all threads
    for(int i=0; i<=(MAX_THREADS-1); i++){ResetEvent(hEventsArrayRdy[i]);} // wait all threads no more

    - У тебя есть примеры как многопоточку реализовывать?
    - Могу рассказать, как у меня сделано...

    Povelitel, 07 Октября 2016

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

    −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
    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
    #include <iostream>
    #include <string>
    
    std::string lol;
    int x;
    int y=1994;
    
    int main()
    {
    //std::string winter = "winter";
    //std::string summer = "summer";
    int z;
    std::cin >> x;
    while (true){
    //---------------------------
    //check
    if ((x>=1896) and (x<1924)){z=x%4;if(z!=0){break;}}
    if ((x>=1924) and (x<1992)){z=x%4;if(z!=0){break;}}
    if ((x<=1994) and (x<1992)){z=x%2;if(z!=0){break;}}
    //check
    //---------------------------
    if ((x>=1896) and (x<1924)){
    y=1896;
    while(true){
    lol="summer";
    if (y==x)
    {
    std::cout << lol;
    break;
    }
    y=y+4;
    lol="winter";
    if (y==x)
    {
    std::cout << lol;
    break;
    }
    y=y+2;
    }
    break;
    }
    //--------------------------------------
    if ((x>=1924) and (x<1992)){
    y=1924;
    while(true){
    lol="winter";
    if (y==x)
    {
    std::cout << lol;
    break;
    }
    y=y+4;
    lol="summer";
    if (y==x)
    {
    std::cout << lol;
    break;
    }
    y=y+2;
    }
    break;
    }break;
    //-------------------------
    
    //----------------------------
    if (x>=1994){
    lol="winter";
    if (y==x)
    {
    std::cout << lol;
    break;
    }
    y=y+2;
    lol="summer";
    if (y==x)
    {
    std::cout << lol;
    break;
    }
    y=y+2;
    }
    }
    }

    NodnolStudio, 29 Сентября 2016

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

    +5

    1. 1
    2. 2
    3. 3
    #define que queue
    #define queueue queue
    #define dequeue deque

    3_dar, 29 Сентября 2016

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