MuadDib Posted December 23, 2011 Share Posted December 23, 2011 Использую сабж для разработки под UC-7112-LX Plus. Версия 1.3 - последняя, скачана с англоязычного сайта производителя. Почему-то сообщения, выводимые компилятором выглядят вот так: dscollection.cpp:320: instantiated from here ../base/fifoconnection.h:353: предупреждение: long int format, unsigned int arg (arg 5) То есть имеем эдакий "пераццкий" перевод а-ля Промт: слово warning заменено на русский эквивалент, все остальное остается по-прежнему. Предположительно, это связано с какими-то настройками ОС (Ubuntu 10.10). К сожалению, парсер компиляторного вывода Eclipse не знает ридну мову и маркирует такое предупреждение как ошибку. Можно как-нибудь (настройками командной строки компилятора или еще как-нибудь) отключить эту эрзац-локализацию? Link to comment
boris_r_v Posted December 27, 2011 Share Posted December 27, 2011 ну насчет перевода я не в курсе, да и эклисами не пользуюсь, от make and direct hand тащусь, но в данном предупреждении говориться, что имеет место быть попытка инстантировать шаблон у которого 5-й параметр заявлен беззнаковым целым длинным, а устанавливается знаковым целым длинным - т.е. закладываешь себе мину замедленного действия, как в той истории про робота который переварачивался из-за того считал что едет назад и сматывал интерфейсный кабель, а на самом деле просто разогнался так что значение скорости в переменной изменило содержимое 7 бита (считаем с 0) в старшем байте скорости, - из-за чего робот посчитал что, скорость отрицательна, значит едет назад.... либо измени шаблон, либо сделай безопасное приведение типов ... и будет тебе щастье P.S. и личку проверь, я там тебе по флешке отписался. Link to comment
MuadDib Posted December 28, 2011 Author Share Posted December 28, 2011 но в данном предупреждении говориться, что имеет место быть попытка инстантировать шаблон у которого 5-й параметр заявлен беззнаковым целым длинным, а устанавливается знаковым целым длинным - т.е. закладываешь себе мину замедленного действия, как в той истории про робота который переварачивался из-за того считал что едет назад и сматывал интерфейсный кабель, а на самом деле просто разогнался так что значение скорости в переменной изменило содержимое 7 бита (считаем с 0) в старшем байте скорости, - из-за чего робот посчитал что, скорость отрицательна, значит едет назад.... либо измени шаблон, либо сделай безопасное приведение типов ... и будет тебе щастье На самом деле данное конкретное предупреждение связано со строкой формата vfprintf. Выводится значение типа size_t. Код компилируется под 2 платформы. На uClinux size_t является unsigned long, и в строке должно быть %ld, на Linux - unsigned int, соответственно компилятор ожидает %d. Ситуация потенциально опасна, если sizeof(long) != sizeof(int), что в моем случае не так. Особенно поганая ситуация может получиться, если длина различается, а компилятор использует стек для передачи параметров при вызове функции (в нашем случае для этого задействуются регистры). Тогда в случае некорректного вызова можно поиметь нарушение стека. В моем случае для избавления от warning'ов можно было выкинуть нафиг printf-подобные функции и использовать <iostream>. Однако, поскольку текущий проект - это наш первый проект на uClinux, я изначально решил не рисковать и не использовать громоздкую потоковую библиотеку C++, тем более что семейство printf используется в основном для лога ошибок. Поэтому данную конкретную ситуацию я исправил с помощью define-константы, задающей нужный формат вывода size_t. Но вопрос, разумеется, не в предупреждении, а в том, как заставить компилятор давать нормальный вывод. Link to comment
Komantsev Posted January 9, 2012 Share Posted January 9, 2012 Добрый день, Не пробовали изменить локализацию ОС (например, так, как советуют здесь: http://superuser.com/questions/62031/how-to-change-the-linux-localization)? Link to comment
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now