Category: юмор

лилия, походы

Почта России цинична и беспощадна.

Вчера в почтовом ящике обнаружил извещение. Точнее два: первичное и вторичное. Скреплённые степлером. На одно и то же отправление. Причём первичное выписано на пол дня позже.
работа, кошка

О printf и потерянном умножении

Тяжела жизнь программиста:
радость от локализации нового бага
в своей программе всегда омрачается
осознанием собственной тупости. (c)


Нарвался я тут на проблему при использовании функции sprintf - ни в какую не хотело работать форматирование вывода. То есть пишу я что-нибудь типа sprintf(str, "%4d", 123); и получаю в стр "123", вместо " 123". Долго я с этим бился, перековеркал все ключи компилятора и линкера, пересобрал свежие версии avr-libc, binutils и avr-gcc (а так же всего, что для них требуется) и уже собирался просить помощи у авторов avr-libc, но сегодня я таки нашёл решение проблемы. Дело в том, что в avr-libc есть три варианта библиотеки, отвечающей за vprintf: полная, реализующая практически все требования стандарта (линкуется с -lprintf_flt), урезанная, реализующая базовый вывод (линкуется с -lprintf_min) и промежуточный вариант, который который умеет всё, кроме вывода дробных чисел (линкуется по умолчанию). Я же по своей наивности думал, что вариантов всего два и линковал с -lprintf_min и лишь посмотрев исходник либы а понял, что в min варианте она и не должна заниматься форматированием - только простой вывод. Конечно я и раньше подозревал, что косяк может быть где-то там, и предпринимал попытки слинковаться с -lprintf_flt, но тогда мне линкер говорил, что не может найти операцию умножения... Правда, как потом выяснилось, и дефолтовая версия тоже хочет умножение. Короче, в конечном итоге решение проблемы свелось к поиску потерявшегося умножения =). А вот в этом мне помогла чистая случайность - обнаружилось, что у меня на домашнем ноуте всё прекрасно собирается и с -lprintf_flt. Ну, в общем, в результате сравнения ключей выяснилось, что всему проблемой директории поиска. Но весь юмор в том, что для решения проблемы требовалось не указать какие-то правильные пути, а наоборот - удалить. Причём удалить все пути... Вот такие вот шутки юмора...