C #0

Последний год я занимался чем угодно, только не программированием. Время размять мозг. На этот раз вернёмся к истокам. Си как он есть. Как он есть в 2022 году. Задача № 1 — на простом примере разобраться с тулчейном и инструментами.

Решаемая задача

Как я люблю, из старой книги по Бейсику.


Кольцевое сечение. Вычисляем моменты инерции (осевой и полярный), а также площадь. Три простые математические формулы. Как раз сойдёт, чтобы не отвлекаться на реализацию собственно логики.

Реализация

Компиляция, запуск и GIT

Кто догадался, где в этой программе лютый баг — возьмите пирожок с полки. А пока — запускаем Ubuntu (у меня WSL), идём туда, где у нас лежат поименованные выше файлики, компилируем:

gcc main.c annularsection.c -lm -Wall

Получаем a.out, запускаем:

Enter inside diameter:
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

Popular posts from this blog

Rust #0 — «Угадай число», первая версия

Rust #1 — «Угадай число», причесываем