Оберон-клуб «ВЄДАsoft» https://zx.oberon.org/forum/ |
|
Модульность и язык Си https://zx.oberon.org/forum/viewtopic.php?f=25&t=300 |
Страница 1 из 5 |
Автор: | Zorko [ 19 янв 2017, 22:02 ] |
Заголовок сообщения: | Модульность и язык Си |
Цитата: Модульное программирование на языке Си возможно, но лишь в том случае, когда программист придерживается ряда довольно жестких правил: Вся статья
• На каждый модуль должен приходиться ровно один header-файл. Он должен содержать лишь экспортируемые прототипы функций, описания и ничего другого (кроме комментариев). • Внешней вызывающей процедуре об этом модуле должны быть известны только комментарии в header-файле. • Для проверки целостности каждый модуль должен импортировать свой собственный header-файл. • Для импорта любой информации из другого модуля каждый модуль должен содержать строки #include, а также комментарии, показывающие, что, собственно, импортируется. • Прототипы функций можно использовать только в header-файлах. (Это правило необходимо, поскольку язык Си не имеет механизма проверки того, что функция реализуется в том же модуле, что и ее прототип; так что использование прототипа может маскировать ошибку «отсутствия функции» — «missing function»). • Любая глобальная переменная в модуле, и любая функция, кроме той, что импортируется через header-файл, должны быть объявлены статическими. • Следует предусмотреть предупреждение компилятора «вызов функции без прототипа» (function call without prototype); такое предупреждение всегда нужно рассматривать как ошибку. • Программист должен удостовериться в том, что каждому прототипу, заданному в header- файле, соответствует реализованная под таким же именем в том же модуле неприватная (т.е. нестатическая в обычной терминологии Си) функция. К сожалению, природа языка Си автоматическую проверку этого делает невозможной. • Следует с подозрением относиться к любому использованию утилиты grep. Если прототип расположен не на своем месте, то это, скорее всего, ошибка. • В идеале программисты, работающие в одной команде, не должны иметь доступа к исходным файлам друг друга. Они должны совместно использовать лишь объектные модули и header-файлы. Очевидная трудность в том, что мало кто будет следовать этим правилам, ибо компилятор не требует их неукоснительно соблюдать. Модульный язык программирования по меньшей мере частично защищает хороших программистов от того хаоса, который создают плохие программисты. А язык Си этого сделать не в силах. |
Автор: | prospero78su [ 05 фев 2017, 12:18 ] |
Заголовок сообщения: | Re: Модульность и язык Си |
Легче удавиться, чем следовать этим правилам))) |
Автор: | vlad [ 07 фев 2017, 18:06 ] |
Заголовок сообщения: | Re: Модульность и язык Си |
prospero78su писал(а): Легче удавиться, чем следовать этим правилам))) Это специально, чтоб оберонщики даже не смотрели в сторону С ![]() |
Автор: | Zorko [ 07 фев 2017, 19:52 ] |
Заголовок сообщения: | Re: Модульность и язык Си |
Влад, а ты сам не оберонщик? ![]() Это я к тому, что редкий оберонщик не знает других технологий. |
Автор: | vlad [ 07 фев 2017, 20:35 ] |
Заголовок сообщения: | Re: Модульность и язык Си |
Zorko писал(а): Это я к тому, что редкий оберонщик не знает других технологий. Это я к тому, что озвученные тезисы "Модульного программирования на языке Си", даже в контексте знания Си, вызывают сомнения в адекватности автора (или как вариант - автор имел дело с Си лет 20 назад и в весьма специфичной предметной области). А уж вне контекста - священный ужОс как у prospero78su. |
Автор: | Zorko [ 07 фев 2017, 21:30 ] |
Заголовок сообщения: | Re: Модульность и язык Си |
А я бы подтвердил эти тезисы о модульности своим личным опытом, иначе и копировать бы не стал. |
Автор: | vlad [ 07 фев 2017, 22:09 ] |
Заголовок сообщения: | Re: Модульность и язык Си |
Zorko писал(а): А я бы подтвердил эти тезисы о модульности своим личным опытом, иначе и копировать бы не стал. Как много тебе приходилось работать с Си? Особенно интересно услышать про работу в команде и, в частности, "совместно использовать лишь объектные модули и header-файлы". |
Автор: | Zorko [ 07 фев 2017, 22:14 ] |
Заголовок сообщения: | Re: Модульность и язык Си |
Я программист-самоучка, до многих вещей доходил сам. Мне стоило больших усилий понять как пользоваться в Си раздельной компиляцией, что такое пре-хэширование заголовков, и зачем оно, я долго не мог понять, что в хидерах надо описывать только прототипы функций (я до сих пор встречаю исходники, в которых в хидерах находится весь код). Я очень слабо понимал, зачем нужно: Код: "C" #ifndef __ThisModule В команде на языке Си не работал, но мне видится плохой идея раскрытия потрохов всех модулей только для возможности их использования. Куда уж лучше светить только интерфейсы. А их представлением в Си являются хидеры. Дело здесь не столько в секретности, сколько в том, насколько велик объём необходимых знаний, чтобы воспользоваться сторонним модулем. |
Автор: | vlad [ 08 фев 2017, 02:04 ] |
Заголовок сообщения: | Re: Модульность и язык Си |
Zorko писал(а): Я программист-самоучка, до многих вещей доходил сам. Я согласен со всем, что ты написал в предыдущем сообщении. У меня претензии к осмысленности оригинальных тезисов. Потому что они: 1. Не отражают текущую "best practice" для С/С++. Вкрапления разумного смешаны с какой-то херней типа grep'a. 2. Не помогают понять "как же они там вообще живут без модулей" человеку далекому от С/С++ (см. реакцию prospero78su). Т.е. с тем же успехом можно было написать "в С/С++ нет модулей" - полезной информации столько же, а букв меньше. |
Автор: | trurl [ 14 фев 2018, 07:36 ] |
Заголовок сообщения: | Re: Модульность и язык Си |
vlad писал(а): Я согласен со всем, что ты написал в предыдущем сообщении. У меня претензии к осмысленности оригинальных тезисов. Потому что они: 1. Не отражают текущую "best practice" для С/С++. Вкрапления разумного смешаны с какой-то херней типа grep'a. Что за "С/С++"? Для С вполне отражают. |
Страница 1 из 5 | Часовой пояс: UTC + 2 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |