C #0
Последний год я занимался чем угодно, только не программированием. Время размять мозг. На этот раз вернёмся к истокам. Си как он есть. Как он есть в 2022 году. Задача № 1 — на простом примере разобраться с тулчейном и инструментами.
Решаемая задача
Как я люблю, из старой книги по Бейсику.
Кольцевое сечение. Вычисляем моменты инерции (осевой и полярный), а также площадь. Три простые математические формулы. Как раз сойдёт, чтобы не отвлекаться на реализацию собственно логики.
Реализация
Компиляция, запуск и GIT
Кто догадался, где в этой программе лютый баг — возьмите пирожок с полки. А пока — запускаем Ubuntu (у меня WSL), идём туда, где у нас лежат поименованные выше файлики, компилируем:
gcc main.c annularsection.c -lm -Wall
Получаем a.out, запускаем:
3
Enter outside diameter:
4.11
Area: 5.497787
Moment of inertia: 8.590292
Polar moment of inertia: 17.180585
Ура, вроде как работает? Ну что ж, самое время сделать git: инициализируем через git init, добавляем файлики через git add, делаем git commit. Это было просто.
Баги и развитие
А теперь возвращаемся к лютому багу: программа работает с корректным вводом, но если попробовать ввести какую-то дичь, уходит в бесконечный цикл. Причина следующая: scanf в случае неудачной попытки прочитать число возвращает результат, отличный от 1, но не очищает буфер. Поэтому на следующей итерации он снова пытается прочитать мусор, и так далее. Надо либо очистить буфер, либо взять более продвинутый инструмент.
Помимо этого, для того, чтобы это стало похожим на программу, а не на кусок кода, нам нужно сделать кое-что ещё:
- документацию
- мейкфайл (чтобы каждый раз ручками флаги не вводить)
- тесты
- локализацию
- возможно, какой-то простенький TUI
Этим всем, разумеется, я займусь в следующий раз, когда меня посетит желание сдуть пыль с компилятора.
Comments
Post a Comment