![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| boostcoder |
|
||||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
привет.
имеется такой код, найденный на этом форуме: http://forum.vingrad.ru/index.php?showtopi...t&p=1803380 http://forum.vingrad.ru/index.php?showtopi...t&p=1803439
http://liveworkspace.org/code/7d2a9cad3fd9...d524558e9106467 этот код используется в одном из моих проектов, и, честно говоря, уже врос в проект. при сборке получаю такой варнинг:
и он меня уже задрал %) причина варнинга - понята. не понимаю как его исправить. использовать '-Wtype-limits' не хочется. спасибо. |
||||
|
|||||
| alexvs11 |
|
|||
|
hell is here ![]() ![]() Профиль Группа: Участник Сообщений: 518 Регистрация: 21.8.2010 Репутация: 6 Всего: 10 |
||||
|
||||
| volatile |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 37 Всего: 85 |
Да, похоже это был изначально виндовый код.
boostcoder, я не вникал глубоко в алгоритм. может просто заменить шорт на wchar_t http://liveworkspace.org/code/64065aa254c8...6cf345fc2d9fd24 изменил только 52 строчку ? |
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
да, можно и на wchar_t заменить. катит. ибо он на линуксе, по умолчанию равняется 32ум битам.
спасибо. вопрос закрыт. |
|||
|
||||
| volatile |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 37 Всего: 85 |
Ну тогда и последнюю елс-иф, 62 строчку
else if (*it <= 0x1FFFFF) { заменить на else if (nchar <= 0x1FFFFF) { в целях оптимизации. похоже она (nchar) только для оптимизации и введена. |
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
так будет правильней всего: std::wstring::value_type nchar = *it;
|
|||
|
||||
| volatile |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 37 Всего: 85 |
boostcoder, вообще код какой-то любительско-велосипедный
Вот здесь, например, вообще ошибка (96 строка): должно быть:
пруф от borisbn http://ru.wikipedia.org/wiki/UTF8
Символы, конечно редкие, но тем не менее. Возможно что и еще есть ошибки. Заметил _абсолютно_ случайно. |
||||
|
|||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
volatile, спасибо, исправил
код не я писал. так что особо не проверял. но и проблем до сих пор не замечал. |
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
приподниму ненадолго тему.
попробовал собрать этот код на MSVC-2008, и получил:
люди добрые, подскажите как поправить? код. строка 63. спасибо. |
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
это наверное из-за того, что sizeof(wchar_t) на WIN платформе равняется 16..
|
|||
|
||||
| volatile |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 37 Всего: 85 |
||||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
volatile, спасибо, конечно. так а от варнинга как избавится?
|
|||
|
||||
| volatile |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 37 Всего: 85 |
||||
|
||||
| volatile |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 37 Всего: 85 |
Да, таки я подумал, это будет наиболее оптимально. Так как при двухбайтном wchar'е, до этого участка дело, полюбому никогда не дойдет. Значит и отлючить его правильно. В Никсах (при широком wchar'е) останется как и было. Вообще-то, там по правилам, для этих редких символов, нужно вроде два 2-байтных wchar'а вставлять. Но алгоритма их вычисления я не знаю. А вообще надо бы юзать какие-то более продвинутые библиотеки. Короче, для данного простого кода, это неплохой выход, имхо. |
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
volatile, спасибо.
как снова попаду в венду - проверю. |
|||
|
||||
| Dem_max |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1780 Регистрация: 12.4.2007 Репутация: 4 Всего: 39 |
nchar всегда будет меньше 0xFFFF, отсюда и варнинг -------------------- Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte") |
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
да, с этим макросом варнинг пропал.
спасибо. |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |