LINUX.ORG.RU

Делите ли вы *.c файлы?

 


1

3

Есть у меня на работе приверженец теории о том, что один файл-одна функция. В принципе я с ним не согласен, но 1875я строка мне говорит, что надо бы файл немного того, ибо мотать/искать нужную функцию уже неудобно.

По какому принципу вы делите *.c-файлы (если делите) и как при этом именуете, если *.h для них должен быть один?

★★

Последнее исправление: cetjs2 (всего исправлений: 1)
Ответ на: комментарий от sambist

Ну и да, это всё сахар, хидер должен читаться легко, вот самое главное. Тот же go-to-definition решает все проблеммы, и есть в любом, уважающем себя инструменте.

Если хидер нелья быстро и осознанно, прочитать в gedit - то он неудобный.

pon4ik ★★★★★
()
Ответ на: комментарий от pon4ik

Как минимум можно разбить условно на libname-types.h и libname.h

Сто раз уже это разбито:

./base:
smlbase.c  smlbase.h  smlconsts.h

./engine:
smltheme.c  smltheme.h

./events:
smlevents.c  smlevents.h

./graph:
smlgradient.c  smlimage.c  smlraster.c           smlraster.h
smlgradient.h  smlimage.h

./local:
smlcheck.h     smlhandlers.h  smlprofiler.h   smlwarehouse.h
smlhandlers.c  smllocal.h     smlwarehouse.c

./math:
smlgeometry.c  smlgeometry.h  smlmath.c  smlmath.h

./parser:
smldio.c  smldio.h  smlparser.c  smlparser.h  smlstrings.c  smlstrings.h

./screen:
smlbuttons.c  smlfonts.c  smlscreen.c  smlwindows.c
smlbuttons.h  smlfonts.h  smlscreen.h  smlwindows.h

./templ:
smllistsd.c  smllistsd.h  smllistss.c  smllistss.h

./time:
smltime.c  smltime.h

sambist ★★
() автор топика
Ответ на: комментарий от sambist

Судя по всему, я слабо разбираюсь в твоей предметной области, я так понял речь идет о чем то связанным с графикой?...

В моей практике, когда я видел модуль с интерфейсом более 100 методов, это было что то дробимое и либо рефакторимое, либо оставленное из за легаси.

По сути, у тебя на скриншоте много структур. Модуль = Структура + операции. В этом же модуле могут находится сущности находящиеся в наиболее тесных связях с исходной, но много где это считается моветоном, а много где на это кладут известный орган, часто, даже без особых последствий.

Если у тебя много стэйтлес функций, их конечно лучше группировать только по назначению, но имхо, при должных желании и фантазии, всегда можно найти подходящий классификатор что бы разбить это множество на достаточно мелкие тематические группы.

Повторюсь - важен не обьём кода, модуль в nк строк может легко и непринуждённо читаться при условии, что речь в нём идёт об одной и той же сущности.

Ну это на самом делё всё так - моё тухлое имхо.

pon4ik ★★★★★
()
Ответ на: комментарий от sambist

Какой бы редактор вы не взяли, бегунок прокрутки становится уже с каждым разом и (внезапно) строк становится больше.

код сворачивай, и будет тебе щастье.

ЗЫЖ юзаю вим.

ЗЗЫЖ

Юзаю QtCreator для plain-си проекта. Он тоже notepad.exe?

открой для себя kDevelop

emulek
()

Делю, когда замечаю что исправляю скопипащеную ошибку в общем модуле в третий раз.

ei-grad ★★★★★
()
Ответ на: комментарий от yoghurt

Ну да, нам же с кодом надо работать, да с объектами живыми, а не строчки править в файлах каких-то.

literate programming?

loz ★★★★★
()
Ответ на: комментарий от i-rinat

Жесть.

Про sqlite сразу подумал при виде таких простыней(:

b0c0813f
()
Ответ на: комментарий от anonymous

glibc — цветочки. Истинные наркоманы написали glib.

Ну, а про культи вообще непонятно: там явно либо мегачудовищные вещества были, либо какое-то жестокое заболевание мозга.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от anonymous

Кстати, в статической библиотеке обязательно должно быть "файл == 1 функция", иначе библиотека будет очень жирной. А так тупо из архива выдернется функция — вуаля!

В динамической тоже было бы неплохо так делать, а то ведь полным-полно есть библиотек, которые используются от силы одним-двумя приложениями, да и то не полностью.

Если бы программисты работали не спустя рукава, а хоть чуточку ответственно, такого беспредела не было бы! И современные операционные системы не требовали бы 1-2ГБ оперативы тупо чтобы работать...

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от anonymous

А что, разве целиком вся динамическая библиотека в память запихивается? Я думал, что точно так же, как в статической, распаковывается лишь файл с нужной функцией...

Как страшен мир!

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Eddy_Em

Кстати, в статической библиотеке обязательно должно быть «файл == 1 функция», иначе библиотека будет очень жирной. А так тупо из архива выдернется функция — вуаля!

Пойди про -ffunction-sections почитай, что ли.

i-rinat ★★★★★
()
Ответ на: комментарий от Eddy_Em

А что, разве целиком вся динамическая библиотека в память запихивается?

Она целиком mmap-ится. Реально в память попадут только используемые страницы.

Но вообще я говорил про статические библиотеки, линкеры по хорошему должны бы уметь выдирать секции из отдельных объектных файлов.

anonymous
()
Ответ на: комментарий от anonymous

Вон, выше i-rinat про это намекал. Только я что-то не встречал этих флагов (кроме разве что embedded) в обычном софте...

А ведь это должно быть поведением gcc по умолчанию!

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Eddy_Em

А ведь это должно быть поведением gcc по умолчанию!

Сетуешь на большое потребление памяти и разбухший софт, а сам предлагаешь включить оптимизации, которые увеличивают потребление памяти, раздувают бинарники и замедляют выполнение. Гениальный план.

i-rinat ★★★★★
()

Капец

Ламерье, никогда не создававшее статических библиотек, детектится сразу.

Потому что принцип «одна функция на один .c-файл» — это как раз оттуда. Из каждого исходника получается объектник, и линкер дёрнет из библиотеки только те, в которых есть используемые функции. А если лепить по несколько функций в один исходник — в екзешник попадут и те, что не вызываются ни разу. (Да, нынешние оптимизаторы могут и их выкидывать в некоторых случаях, но есть нюансы.)

alegz ★★★★
()
Ответ на: комментарий от Eddy_Em

Как раз-таки меньше (при статической линковке, а при динамической пофиг).

Разве что на программах типа «hello world», где всё равно пофиг, сколько занимает бинарник, 10 kB или 300 kB.

i-rinat ★★★★★
()
Ответ на: комментарий от Eddy_Em

Хелловорлду максимум байт 100 надо!

А сваргань что-нибудь зашибатое в пару-тройку сотен байт?

i-rinat ★★★★★
()
Ответ на: комментарий от anonymous

Я надеюсь, хоть тестами оно покрыто?

libxml2 — да. Даже утечки памяти проверяются. Но это не мешает ловить от неё сюрпризы.

i-rinat ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.