LINUX.ORG.RU

Модули

 


0

1

Салам пополам, братья и сестры! Начал изучат программирование и дошел до модулей. И хочу спросит а они уже есть? Прочитал про GCC он уже может модули?

Ответ на: комментарий от Miguel

сотни говно-билд систем которые навернули поверх инклюдов раздельную компиляцию( да-да истинную ибо не всякое инклюденье в этих(каждой в отдельности) билд@-ах есть модуляченье)

во времена оные были и пропатченые с-компиляторы с «сделано у тут» модульностью - в итоге нет и не будет в сях в целом модульности - не про то язык.

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

Ну во у меня список файлов:

ls *.[hc]
binmorph.c  cclabling.h      cmdlnopts.c  dilation.h  draw.h       fc_filter.h  fits.h         grasshopper.h  imagefile.h  inotify.h  median.c  stbimpl.c
binmorph.h  cclabling_ori.h  cmdlnopts.h  draw.c      ec_filter.h  fits.c       grasshopper.c  imagefile.c    inotify.c    main.c     median.h
cmake генерирует Makefile, далее make каждый сишный файл компилирует раздельно и объектные уже собирает воедино. Если я внесу изменение в файл cmndlnopts.c, следующий make перекомпилирует лишь его и соберет все заново. Если внесу измение в fits.h, перекомпилированы будут все файлы, которые его включают.

Ну и чем от этого "модульность" отличается? Где цимус?

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

тем что вынесено(или не до внесено - зависит как Имярек видит мир и его эволюции) за пределы синтаксиса модульность/пакетность

линтер часть языка али нет?

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

Ну и чем от этого «модульность» отличается? Где цимус?

Делать подпроекты? Никогда не даелал статические либы для них?

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

не даелал статические либы

Уточняем: «статические либы» - это действительно либы? или это тупо архивы объектников?

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

Под «либами» много чего можно понимать. Бывают, например, header-only библиотеки (stb, например). А часть своих часто используемых сниппетов я вообще как динамическую библиотеку оформил (потому что замучился в 100500 велосипедах согласовывать последние изменения внутри всех этих сниппетов: исправишь баг в одном месте или фичу добавишь, и ковыряйся потом…).

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

«Цимус» в том, что твой draw.h включается в другие файлы как ТЕКСТ. Можешь сам проверить: возьми и руками замени include «draw.h» на содержимое самого файла. Скомпилируется без проблем. То есть, draw.h не компилируется вообще.

А отсюда всякие вредные штуки. Если ты напишешь в draw.c #define MY_COOL_MACROS 1 перед #include, а внутри draw.h используется MY_COOL_MACROS — то в draw.o (или draw.obj) у тебя MY_COOL_MACROS будет 1, а в других он будет считаться неопределённым. Что, конечно, круто для всяких хаков, но легко приводит к головной боли, особенно если от этого макроса зависит интерфейс «модуля» draw.c.

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

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

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

В си делается все ручками. Грузим через dlopen, и вперед. :)

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

Бред. Если мне нужно подключать какие-то внешние функции я линкуюсь с динамической библиотекой. И никакие модули мне не нужны!

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

Ты вообще прочитал, на что отвечаешь?

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

А это нормально работает в случе, если вообще ничего неизвестно о библиотеке и файлов-загловков нет?

Если интерфейс к модулю неизвестен, то да, будут проблемы. Там типы меток не передаются, надо их знать заранее. Ну такой себе c-style.

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