Re[25]: JetBrains
От: mgu  
Дата: 18.04.16 22:21
Оценка:
Здравствуйте, so5team, Вы писали:

S>Гораздо важнее другой вопрос: когда библиотека поставляется в бинарном виде, как быть тогда? На ваш же вопрос ответ прост: поддержка С++11.


Ну, крупные игроки предоставляют версии под разные платформы. Кустарные мастерские (например, Кэнон: http://community.usa.canon.com/t5/Office-Printers/setting-up-ImageFormula-DR-C225-on-Linux/m-p/169967 ) поставляют исподники. Кстати, в данном случае налицо преимущество одного бесконечного hpp, когда тестировщики не могут сосредоточиться.

mng>>И что им делать, если их текущий сборщик не переварит всех нововведений?


S>Искать что-нибудь более подходящее для себя. Написать свое. Заплатить за адаптацию под свои условия. Переделать самостоятельно. С исходным текстом можно делать все, что угодно.


Ещё вариант: использовать в библиотечном коде старые стандарты. Пусть не модно, зато благодарность пользователей не будет знать границ.

mgu>>Да нет, к подходу -- налицо излишняя многословность.


S>Разница только в количестве строк.


Вам никогда не давали в качестве тестового задания посчитать количество слов в файле?

mgu>> Против инкрементов у вас же возражений нет?


S>Инкременты откуда взялись?


Из вашего кода. Ведь можно и без них обойтись.

S>>>К коду AlexGin сходу можно предъявлять претензии гораздо более серьезные.


mgu>>Например?


S>Да вот, первый же cpp-файл в репозитории. И сразу же:

S>
S>bool SMSContentGreater(CSMSContent* pSMS1, CSMSContent* pSMS2) // Global function for std::sort
S>{
S>    CTime time1, time2;
S>    SYSTEMTIME st1, st2;
S>    if (pSMS1->GetSMSTime().GetAsSystemTime(st1))
S>        time1 = CTime(st1);
S>    if (pSMS2->GetSMSTime().GetAsSystemTime(st2))
S>        time2 = CTime(st2);

S>    time_t t1 = time1.GetTime();
S>    time_t t2 = time2.GetTime();

S>    if (t1 > t2)
S>        return true;
S>    else
S>        return false;
S>}
S>


Да уж, эндшпиль напомнил мне мои рассуждения: https://rsdn.ru/forum/job/6268918
Автор: mgu
Дата: 04.12.15
.

S>Однако, особая пикантность ситуации состоит в том, что у CTime уже есть оператор "меньше". Посему непонятно, а зачем вообще нужна еще одна трансформация из CTime в time_t. Более того, очень похоже, что GetSMSTime уже возвращает объект типа CTime, у которого затем дергается GetAsSystemTime() дабы получить SYSTEMTIME. А затем из SYSTEMTIME вновь конструируется CTime... Чой-то неведомое.


Согласен.

S>Поля m_pTXBuff и m_pRXBuff объявлены в самом классе CATCmdDevice. Следовательно, занулять их в деструкторе после освобождения памяти смысла нет.


А и правда.

S>Опять же, на счет m_pTXBuff и m_pRXBuff: почему идет ручное управление памятью? Почему нельзя было воспользоваться std::vector (рекомендуемый путь со времен C++98)? Или вообще почему не сделать m_TXBuff и m_RXBuff обычными C-шными массивами?


S>Далее:

S>
long CATCmdDevice::OpenSerial(int iComChannel, int iComBaudRate)
S>{
S>    if (m_pSerial)
S>        delete m_pSerial;

S>    m_pSerial = new CSerial();
S>    if (m_pSerial != NULL)
S>    {   // m_pSerial->Open(1, 9600);
S>        BOOL bOpen = m_pSerial->Open(iComChannel, iComBaudRate); 
S>        if(!bOpen)
S>        {
S>            g_log.SaveLogFile(PBK_ERROR, "Error during opening port: COM%u (baud rate = %u)",iComChannel,iComBaudRate);
S>            return 1L; // Error occur
S>        }
S>        else
S>            g_log.SaveLogFile(PBK_DEBUG, "Port: COM%u (baud rate = %u) - opening success!",iComChannel,iComBaudRate);
S>    }
S>    return 0L; // OK!
S>}
S>

S>Что за проверка m_pSerial != NULL после new? Неужели автор транслирует свой код с запретом C++ных исключений на уровне ключей компилятора? Если даже он делает именно так, то где ветка else у этого if-а? А то ведь получается, что при запрещенных исключениях у него нет обработки ошибки выделения памяти (даже если в m_pSerial окажется 0, функция OpenSerial все равно вернет 0 в качестве признака успешного завершения). Если же исключения не запрещены, то данная проверка не имеет смысла, т.к. при недостатке памяти new бросит bad_alloc.

Угу, плюс подобные проверки вызывают беременность кода (его дюже сдвигает вправо, лучше на нет и суда нет, а не оборачивать успешную ветку) и таки-да, опять return ... else.

S>И это, повторюсь, всего лишь беглый просмотр всего лишь первого файла.


S>Несомненное достоинство данного кода -- это возможность в нем разобраться. Но общее впечатление, что его писал вчерашний студент, который только-только начал изучать язык C++.


Н-да... Но бывает гораздо хуже!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.