LINUX.ORG.RU

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

 


1

3

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

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

★★

Последнее исправление: cetjs2 (всего исправлений: 1)

стараюсь всегда делать пары .c+.h, по модулям. когда один .h на много .c — это плохой дизайн. такое тоже случается, но это лучше рефакторить. названия — одинаковые у .c и .h.

waker ★★★★★
()

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

MikeDM ★★★★★
()

один файл-одна функция

На Си? Модули, нет не слышал.

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

А ты выкинь свой notepad.exe и возьми нормальный инструмент.

no-such-file ★★★★★
()

По функционалу. Скажем, IO в один файл, main + обработка параметров КС — в другой. По матметодам — тоже каждому методу свой файл.

А для железа делю по уровням абстракции и тем же функциональным признакам.

anonymous
()

По связности и связанности функций.

Например, для парсера xml выносил конечный автомат в один файл, а обработчик entities - в другой, хотя сам обработчик был от силы в два десятка строк - он не вписывался по смыслу в набор функций по разбиению потока.

Например, для рогалика движок разнёс на файлы с логикой действий, с генерацией и переходом между уровнями и с вспомогательными функциями (низкого уровня).

А ещё есть свёртка (folding) в редакторе. И namespace-ы (их тоже можно сворачивать).

E ★★★
()
Ответ на: комментарий от no-such-file

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

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

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

А ещё есть свёртка (folding) в редакторе.

Есть, но потом задалбывает разворачивать.

sambist ★★
() автор топика

Более 1к строк на файл уже много. Один файл ~ одна смысловая (под)задача, но не более комфортной границы в 500-1к строк.

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

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

ЗЫ Я вот думал, что ты тут скажешь, что в языке Ада всё именно так, как написал ТС, но т.к. ты не сказал, я уже сам засомневался

yoghurt ★★★★★
()

по смысловой нагрузке. по типу как в Паскале.

dikiy ★★☆☆☆
()

Кстати, если уважаемому дону придется когда-нибудь работать с системой управлениями требований а-ля IBM Rational DOORS, и надо будет с этими самими требованиями, переведенными в DOORS из ТЗ, сопоставлять куски кода, всё сразу встанет на свои места :)

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

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

Охренеть, про навигацию ты не слышал? В креаторе есть ещё очень удобная штука - быстрый поиск по Ctrl-K рекомендую освоить и перестать забивать гвозди микроскопом.

Кстати, а если тебе надо найти кусок кода в другом файле - ты все файлы открываешь и визуально просматриваешь?

no-such-file ★★★★★
()
Последнее исправление: no-such-file (всего исправлений: 1)

Нет, даже .h не делаю. На 10к строк начинаю что-то подозревать, но уже лень

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

бегунок прокрутки

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

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

А вообще, организация кода при помощи файлов не нужна и атавизм

Парных скобок хватит всем?

deterenkelt
()

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

Файл == фука, как по мне так это бред :)

Да и 2к строк, это всё таки не так уж и много, для сишечки, особенно с докой, и с лицухой. Если это не одна функция конечно ,видали и такое, ыыы :). А вот если в интерфейсе модуля 100500 функций, значит этот модуль попахивает.

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

Ну дык и юзай outline :) Плюс локатор. Я, обычно, как индекс использую хидер, а оттуда прыгаю на нужные функи, удобно, там и дока есть и буков обычно меньше. Вот когда мне становится некомфортно смотреть на хидер, я начинаю задумываться.

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

Ну, где мне не встречалась эта практика - обычно это был костыль, что бы упростить суперкласс. Зачем так делать из коробки - непонятно, если есть отсылка к какому то опенсурс коду, где енто сделано в тему и с душой, был бы примного благодарен:)

pon4ik ★★★★★
()

А что, outline нет? Обычно, один .h означает что ему один .c соответствует.

pef-secure
()
Ответ на: комментарий от nagibator

форматирование k&r способствует поиску заголовков функций, например.

qulinxao ★★☆
()

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

post-factum ★★★★★
()

Конечно нет. Так только упоротые делают. Я бы понял лет пятсот назад, что бы на компиляции время экономить. Но сейчас? Бессмыслится. Разве что все фии по 1000 строк с nested functions, аля ада/паскаль, но это всё равно не в стандарте емнип.

nanoolinux ★★★★
()

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

reprimand ★★★★★
()

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

На ООП языках да, один файл - один класс (за исключением вложенных).

unt1tled ★★★★
()

Не ленюсь делить проект на разумное число классов, а так как пишу на Qt то даже целые однотипные куски проектов в виде pri-файлов, и ориентир для выделения - тупо функциональность. Например если что-то рисует графики везде (в разных моих проектах) - это отдельный pri, но всё что касается графиков разных типов - это этот же pri но отдельные классы. А если что-то, что нужно исключительно для текущей задачи - ни в коем случае не накостыляю в общие классы.

Учись студент :)

2000 тысячи строк не много по моим меркам, но ты что-то делаешь не так. Дели.

I-Love-Microsoft ★★★★★
()
Ответ на: комментарий от sambist

Креатор умеет отделять окна и разделять внутри одного окна, вполне ничего так: http://i58.tinypic.com/20h0x3p.png К тому же для навигации есть комбобокс с функциями в модуле, а также можно воспользоваться быстрым поиском в командной строке редактора.

unC0Rr ★★★★★
()

Автор, твой IDE/редактор не умеют folding?

blackst0ne ★★★★★
()

Попробовать вычленить куски функционала независимые от основного кода и изолировать их в отдельный модуль со своим АПИ и определённым поведением. Даже если этот модуль будет использоваться ровно в одном месте.

Dendy ★★★★★
()

А искать очередной файл по ФС не устанет приверженец этот? =)
Обычно делаю так:
В файле может быть сколько угодно функций, но только некоторые из них доступны извне, остальные - это закрытая логика, которую используют открытые функции. Все что содержится в файле выполняет строго конкретно определенную задачу, не более. Файл может быть любого размера.
P.S.: И как тут кто то уже высказался, нормальный инструментарий (например CLion от Jet Brains), который умеет в Code Folding, решает большинство проблем с размером файла, а код искать нужно поиском а не ручками.

ychuperka
()

Осиль редактор с макропросмотром.

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

Что есть outline?

окошко сбоку, где функции из исходника (а так же структуры данных, классы и пр) списком выведены. надо перейти к конкретной функции в исходнике — тык на неё в аутлайне и ты на месте.

pef-secure
()
Ответ на: комментарий от sambist

Creator такое умеет только для методов\типов классов, а у меня plain C

Возможно, ты пользуешься не тем языком, для которого создавался Creator, либо не той средой, что лучше подходит для Си :)

pef-secure
()
Ответ на: комментарий от pef-secure

Я пользуюсь тем, что предоставляет максимальное удобство - легкая отладка с возможностью добавлять вычисляемые выражения, автодополнение имен переменных\функций\etc, просмотр define'ов искаропки, автопроверка синтаксиса с почти идеальной разверткой макросов (XMacro не умеет), структурированный вид файлов проекта, точки останова, закладки, возможность установки темы. Свои сборочные комплекты, которые редактируются в два клика.

Из недостатков только отсутствие возможности просмотреть код после препроцессора, но это не то, ради чего Creator создавался.

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

Я пользуюсь тем, что предоставляет максимальное удобство

ну вот аутлайна нет. лично мне без него неудобно. отлаживать программы в дебаггере — это редкая ситуация для меня...

pef-secure
()

До 2000 строк - нормально. Больше 2000 строк - либо что-то очень неудобное пишите или очень громозкое, либо (наиболее вероятно) как-то неправильно. Обычно делаю для каждого *.c файла *.h файл. Остальное по ситуации. И таки да, программы надо делить на модули.

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

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

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

это outline, или за тебя и дрова нарубить надо :)

Вьюха которая показывает только символы определённые в файле.

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

ну таки он и размерами не пугает, по крайней мере то, что видно на лучшем представлении текстовых данных :)

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

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

typedef struct type {
  int a;
  int b;
} type_t;

Либо юзай vim с tagbar'om за редактор.

Либо, внезапно, запили небольшой патчик в outline плагин.

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