История изменений
Исправление tailgunner, (текущая версия) :
На каждый вопрос есть несколько ответов, какждый из них правильный в рамках какой-то субкультуры разработки.
именование структур, полей, функций
обычно всё змеиным_кейсом, но иногда ИменаСтруктурТакие
кто должен отвечать за выделение/освобождение памяти?
Иногда делается функция make_thing, которая выделяет память и инициализирует thing (аналог new), иногда - init_thing, которая работает с уже выделенной памятью,
Нужны ли свои init/destroy или пусть человек сам мучается?
Нужны.
какие типы лучше использовать? int vs int32_t.
Во внешних интерфейсах - с явно указанной разрядностью.
как возвращать ошибки?
-1 или NULL; для тех, кто угорел по ядру - в младших битах невалидного указателя можно передавать код ошибки.
Есть еще стиль errno/SetLastError, но лично я желаю всего плохого тем, кто будет его продвигать.
нужны ли фукнции для инициализации нетривиальных структур?
Это тот же вопрос, что и выше.
Исходная версия tailgunner, :
На каждый вопрос есть несколько ответов, какждый из них правильный в рамках какой-то субкультуры разработки.
именование структур, полей, функций
обычно всё змеиным_кейсом, но иногда ИменаСтруктурТакие
кто должен отвечать за выделение/освобождение памяти?
Иногда делается функция make_thing, которая выделяет память и инициализирует thing (аналог new), иногда - init_thing, которая работает с уже выделенной памятью,
Нужны ли свои init/destroy или пусть человек сам мучается?
Да.
какие типы лучше использовать? int vs int32_t.
Во внешних интерфейсах - с явно указанной разрядностью.
как возвращать ошибки?
-1 или NULL; для тех, кто угорел по ядру - в младших битах невалидного указателя можно передавать код ошибки.
Есть еще стиль errno/SetLastError, но лично я желаю всего плохого тем, кто будет его продвигать.
нужны ли фукнции для инициализации нетривиальных структур?
Это тот же вопрос, что и выше.