LINUX.ORG.RU
ФорумTalks

Индусы забавные


0

1

Источник забавы. Для Ъ:

// 3rd variant
static bool compareCCString(const CCObject* p1, const CCObject* p2) {
    const char* obj = (const char*)p1;
    const char* obj1 = (const char*)p2;
    return strcmp(obj,obj1);
}

// 4th variant
static bool compareCCString(const CCObject* p1, const CCObject* p2) {
    CCString*  obj = (CCString*)p1;
    CCString* obj1 = (CCString*)p2;
    int temp_length1 = sizeof(obj->getCString());
    int temp_length2 = sizeof(obj1->getCString());
    int i=0;
    while ((i < temp_length1) && (i < temp_length2)) {
        if (tolower (obj->getCString()[i]) < tolower (obj1->getCString()[i]))
            return true;
        else if (tolower (obj->getCString()[i]) > tolower (obj1->getCString()[i]))
            return false;
        i++;
    }
    return false;
}

Я даже не хочу там больше ничего писать.

Почему бы и не написать, объяснив ему по пунктам все ошибки? Или книжку предложить ему почитать какую. Все были новичками когда-то.

trycatch ★★★
()

первый вариант вполне себе нормальный, все равно с -O2 там буде чистый strcmp(), я бы туда еще проверку на nullptr и равенство указателей впихнул. второй - ад.

x0r ★★★★★
()
Ответ на: комментарий от andreyu

А ведь есть те, кто пользуется этим кокосом. Правда через некоторое время они начинают блевать.

Использую, не блюю, пишу патчи в некрасивых местах и не только.

P.S. Брат здоров.

quiet_readonly ★★★★
() автор топика
Последнее исправление: quiet_readonly (всего исправлений: 1)
Ответ на: комментарий от x0r

первый вариант вполне себе нормальный, все равно с -O2 там буде чистый strcmp()

Вообще не факт, CCString унаследован от CCObject (+ имеет внутри поле std::string), так вот поля CCObject будут идти первыми. Это несколько unsigned int, в том числе уникальный id объекта, который уникален и заставит strcmp возвращать false.

quiet_readonly ★★★★
() автор топика
Ответ на: комментарий от Xellos

тут и думать не нужно -Werror это даже собрать не даст. то, что индусы кладут на выхлоп транслятора это их личные проблемы.

x0r ★★★★★
()
Последнее исправление: x0r (всего исправлений: 2)
Ответ на: комментарий от quiet_readonly

не обратил внимания на CCObject, думал там const char*.

x0r ★★★★★
()
Ответ на: комментарий от Xellos

Тогда ошибка начинается уже с объявления функции, насколько я понимаю.

Функция используется для сортировки на массиве, который хранит CCObject * и не заботится о типах.

quiet_readonly ★★★★
() автор топика
Ответ на: комментарий от quiet_readonly

А ведь есть те, кто пользуется этим кокосом. Правда через некоторое время они начинают блевать.

Использую, не блюю, пишу патчи в некрасивых местах и не только.

Значит у вас иммунитет.

andreyu ★★★★★
()
Ответ на: комментарий от x0r

первый вариант вполне себе нормальный, все равно с -O2 там буде чистый strcmp(), я бы туда еще проверку на nullptr и равенство указателей впихнул. второй - ад.

Что по вашему вернет strcmp(obj,obj1) при равенстве строк?

andreyu ★★★★★
()
Ответ на: комментарий от quiet_readonly

Функция используется для сортировки на массиве, который хранит CCObject * и не заботится о типах.

Для сортировки будет не лишним знать не только о совпадении или несовпадении строк, но и о том, какая строка больше.

В любом случае strcmp() возвращает 0, если строки идентичны.

А во втором варианте и вовсе бред - обратите внимание на использование tolower().

andreyu ★★★★★
()
Ответ на: комментарий от geekless

И поясните для Ъ, что это за cocos?

Типа движок для игр под андроид и иос от индийцев. Движок внутри такой же ад.

andreyu ★★★★★
()
Ответ на: комментарий от andreyu

Популярный движок для игр под андроид и иос (+8 менее важных платформ) от китайцев. Движок похож на костыльный Objective-C сделанный на коленке средствами c++98, но работает.

fixed.

quiet_readonly ★★★★
() автор топика
Ответ на: комментарий от quiet_readonly

Популярный движок для игр под андроид и иос (+8 менее важных платформ) от китайцев.

Когда я смотрел список разработчиков, то мне показалось, что большинство из них индийцы. Видимо я ошибся.

Движок похож на костыльный Objective-C сделанный на коленке средствами c++98, но работает.

Это самое удивительное, что он все же работает.

andreyu ★★★★★
()
Ответ на: комментарий от DuratarskeyK

Возможно индусы хотели strcasecmp сделать.

В цикле? И длину строки sizeof-ом брать? :)

andreyu ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.