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

    0

    1. 1
    2. 2
    sOW << sn << " ";
    if (!sOW.str().empty())

    Причем

    std::ostringstream sOW;
    std::string sn;

    Elvenfighter, 17 Ноября 2016

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

    +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
    // winnt.h
    typedef wchar_t WCHAR;
    typedef WCHAR *PWCHAR,*LPWCH,*PWCH;
    
    // winldap.h
    #define ldap_init ldap_initW
    WINLDAPAPI LDAP *LDAPAPI ldap_initW(const PWCHAR HostName,ULONG PortNumber);
    
    // my code
    // auto ldap = ldap_init(L"ldap.address", LDAP_PORT); // 1
    
    PWCHAR hostName = (WCHAR*)(L"ldap.address"); // 2
    auto ldap = ldap_init(hostName, LDAP_PORT);
    
    // auto hostName = L"ldap.address"; // 3
    // auto ldap = ldap_init(hostName, LDAP_PORT);

    Вариант (1) выдает warning. Вариант (2) работает ожидаемо. Вариант (3) ожидаемо не компилится. Вопрос: и почему это я не люблю winapi?

    Antervis, 07 Ноября 2016

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

    +6

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    /* public static */ bool
    TestFooFactory::checkItem(const Foo& item)
    {
      if (!&item)
        return false;
      return true;
    }

    null-ccылки в C++? Легко!

    Elvenfighter, 02 Ноября 2016

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

    +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
    #define PI_000  0.0000000000000000000000000000000 //   0
    #define PI_001  0.0174532925199432957692369076849 //   1
    #define PI_010  0.1745329251994329576923690768489 //  10
    #define PI_020  0.3490658503988659153847381536977 //  20
    #define PI_030  0.5235987755982988730771072305466 //  30
    #define PI_040  0.6981317007977318307694763073954 //  40
    #define PI_045  0.7853981633974483096156608458199 //  45
    #define PI_050  0.8726646259971647884618453842443 //  50
    #define PI_060  1.0471975511965977461542144610932 //  60
    #define PI_070  1.2217304763960307038465835379420 //  70
    #define PI_080  1.3962634015954636615389526147909 //  80
    #define PI_090  1.5707963267948966192313216916398 //  90
    #define PI_135  2.3561944901923449288469825374596 // 135
    #define PI_180  3.1415926535897932384626433832795 // 180
    #define PI_225  3.9269908169872415480783042290994 // 225
    #define PI_270  4.7123889803846898576939650749193 // 270
    #define PI_315  5.4977871437821381673096259207391 // 315
    #define PI_360  6.2831853071795864769252867665590 // 360

    http://programina.blogspot.com/2016/10/msaa-cpp-codeblocks.html
    там еще много интересного

    pushkoff, 02 Ноября 2016

    Комментарии (5)
  5. 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)
  6. 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)
  7. 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)
  8. 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)
  9. 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)
  10. C++ / Говнокод #21545

    +2

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

    laMer007, 23 Октября 2016

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