Хочу #include source "file.c"
От: c-smile Канада http://terrainformatica.com
Дата: 04.03.19 02:25
Оценка: :))) :))
Ну вот скажем если бы в C/C++ была конструкция #include source то можно было бы включать библиотеки в исходники проекта без всяких там make и прочей лабуды.

Скажем хочу включить pnglib ну и пишу одну строку:

#include source "pnglib.c"

Где "pnglib.c" это в свою очередь:

#include source "png.c"
#include source "pngerror.c"
#include source "pngget.c"
...


И не надо мне никаких package managers, всяких там cargo, npm и прочей фигни. Ну блин задрало же. Как библиотека так своя хитровывернутая система сборки ...
Отредактировано 04.03.2019 2:26 c-smile . Предыдущая версия .
Re: Хочу #include source "file.c"
От: SaZ  
Дата: 04.03.19 04:13
Оценка: +1
Здравствуйте, c-smile, Вы писали:

CS>Ну вот скажем если бы в C/C++ была конструкция #include source то можно было бы включать библиотеки в исходники проекта без всяких там make и прочей лабуды.


CS>Скажем хочу включить pnglib ну и пишу одну строку:


CS>
CS>#include source "pnglib.c"

CS>

CS>Где "pnglib.c" это в свою очередь:

CS>
CS>#include source "png.c"
CS>#include source "pngerror.c"
CS>#include source "pngget.c"
CS>...
CS>


CS>И не надо мне никаких package managers, всяких там cargo, npm и прочей фигни. Ну блин задрало же. Как библиотека так своя хитровывернутая система сборки ...


Так можно делать уже очень давно. Главное, чтобы пути были доступны в вашей билд системе. И не было опциональной компиляции (например, платформозависимого кода).
А вообще уже скоро будут модули
Re[2]: Хочу #include source "file.c"
От: niXman Ниоткуда https://github.com/niXman
Дата: 04.03.19 07:09
Оценка: +2 :))
Здравствуйте, SaZ, Вы писали:

SaZ>А вообще уже скоро будут модули

пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
Re: Хочу #include source "file.c"
От: Muxa  
Дата: 04.03.19 07:27
Оценка: +2
что я туплю, в чем отличие от обычного #include?
Re[2]: Хочу #include source "file.c"
От: std.denis Россия  
Дата: 04.03.19 08:22
Оценка: +1
M>что я туплю, в чем отличие от обычного #include?

Тем что обычным #include может заинклюдиться лишний хлам.
Полагаю c-smile хочет инструкцию для компилятора, чтобы она заставляла его компилировать указанный файл отдельно, а также сообщить об этой единице трансляции линковщику. Также, например, как в MSVC можно указывать необходимые библиотеки, через #pragma comment(lib, "some.lib")
Re[2]: Хочу #include source "file.c"
От: LaptevVV Россия  
Дата: 04.03.19 08:57
Оценка:
SaZ>А вообще уже скоро будут модули
Они мне уже снились!
Прописал об этом в фейсбуке...
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[2]: Хочу #include source "file.c"
От: _NN_ www.nemerleweb.com
Дата: 04.03.19 09:39
Оценка:
Здравствуйте, SaZ, Вы писали:

CS>>И не надо мне никаких package managers, всяких там cargo, npm и прочей фигни. Ну блин задрало же. Как библиотека так своя хитровывернутая система сборки ...


SaZ>Так можно делать уже очень давно. Главное, чтобы пути были доступны в вашей билд системе. И не было опциональной компиляции (например, платформозависимого кода).

Забыли добавить, ещё чтобы не было функций с одинаковыми именами.

// a.c
static void f() {}

// b.c
static void f() {}

// index.c
#include "a.c"
#include "b.c"


Или подразумевается, что #include source сгенерирует уникальное имя в каждом .c файле ?
Так компилятор как раз это и делает для каждого файла
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[3]: Хочу #include source "file.c"
От: SaZ  
Дата: 04.03.19 10:31
Оценка:
Здравствуйте, _NN_, Вы писали:

_NN>Здравствуйте, SaZ, Вы писали:


CS>>>И не надо мне никаких package managers, всяких там cargo, npm и прочей фигни. Ну блин задрало же. Как библиотека так своя хитровывернутая система сборки ...


SaZ>>Так можно делать уже очень давно. Главное, чтобы пути были доступны в вашей билд системе. И не было опциональной компиляции (например, платформозависимого кода).

_NN>Забыли добавить, ещё чтобы не было функций с одинаковыми именами.

_NN>...


Ну если человек представляет как работает инклюд, то с этим проблем не будет. Мы такие вещи часто в кодстайл выносим, чтоб юнити билд работал.
Re[4]: Хочу #include source "file.c"
От: _NN_ www.nemerleweb.com
Дата: 04.03.19 11:27
Оценка:
SaZ>Ну если человек представляет как работает инклюд, то с этим проблем не будет. Мы такие вещи часто в кодстайл выносим, чтоб юнити билд работал.

Интересно. А какой код стайл?
Давать префиксы функциям? Так static и сделан для того, чтобы не нужно было этим заморачиваться .
И как решаются классы в сpp файлах ?

a.cpp

class A{};

b.cpp
class A{void f(){}};
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[5]: Хочу #include source "file.c"
От: SaZ  
Дата: 04.03.19 11:44
Оценка:
Здравствуйте, _NN_, Вы писали:



SaZ>>Ну если человек представляет как работает инклюд, то с этим проблем не будет. Мы такие вещи часто в кодстайл выносим, чтоб юнити билд работал.


_NN>Интересно. А какой код стайл?

_NN>Давать префиксы функциям? Так static и сделан для того, чтобы не нужно было этим заморачиваться .
_NN>И как решаются классы в сpp файлах ?

_NN>
_NN>a.cpp

_NN>class A{};

_NN>b.cpp
_NN>class A{void f(){}};
_NN>


Да, использовали уникальные неймспейсы либо уникальные имена.
А вот с одинаковыми именами классов мне за 10 лет практики вообще не приходилось сталкиваться. Да и чисто теоретически сложно придумать случай, когда нужно было бы иметь два класса с одинаковыми именами и разным функционалом.
Тут надо понимать, что это осознанное ограничение (на мой взгляд — очень незначительное) ради ускорения сборки.
Отредактировано 04.03.2019 11:46 SaZ . Предыдущая версия . Еще …
Отредактировано 04.03.2019 11:45 SaZ . Предыдущая версия .
Re[3]: Хочу #include source "file.c"
От: Vamp Россия  
Дата: 04.03.19 13:32
Оценка:
C++ 20 вводит модули. Они не спасут отца русской демократии?
Да здравствует мыло душистое и веревка пушистая.
Re[2]: Хочу #include source "file.c"
От: Masterspline  
Дата: 04.03.19 15:55
Оценка:
SaZ>А вообще уже скоро будут модули

Модули — это способ ввести имена (функций, методов, классов, пространств имен) в единицу трансляции. Ровно то же, что делают заголовочные файлы, ничего более. Только делается это на уровне языка, а не текстового препроцессора. Ничего того, что хочет ТС модули не дадут.

Вокруг модулей много ажиотажа и ожиданий, но модули лишь аккуратно сделанные, чуть улучшенные заголовочные файлы. Они не делают ничего более, чем заголовки. Более того, аккуратно написанный заголовочный файл делается модулем в одну строку.
Re[4]: Хочу #include source "file.c"
От: std.denis Россия  
Дата: 04.03.19 16:39
Оценка:
V>C++ 20 вводит модули. Они не спасут отца русской демократии?
можешь спросить у топикстартера
Re[6]: Хочу #include source "file.c"
От: andrey.desman  
Дата: 04.03.19 16:56
Оценка:
Здравствуйте, SaZ, Вы писали:

SaZ>Тут надо понимать, что это осознанное ограничение (на мой взгляд — очень незначительное) ради ускорения сборки.


Разве прямым инклудом ты ускоряешь сборку? На каждый чих же получается полная пересборка вообще всего.
Re[6]: Хочу #include source "file.c"
От: _NN_ www.nemerleweb.com
Дата: 04.03.19 16:57
Оценка:
SaZ>Да, использовали уникальные неймспейсы либо уникальные имена.
SaZ>А вот с одинаковыми именами классов мне за 10 лет практики вообще не приходилось сталкиваться. Да и чисто теоретически сложно придумать случай, когда нужно было бы иметь два класса с одинаковыми именами и разным функционалом.
SaZ>Тут надо понимать, что это осознанное ограничение (на мой взгляд — очень незначительное) ради ускорения сборки.

Конечно, если об этом думать заранее то вполне несложно следовать правилам .
А вот взять простой проект и собрать его таким образом сходу не выйдет.
Я как-то пол дня убил, чтобы собрать так проект
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[4]: Хочу #include source "file.c"
От: c-smile Канада http://terrainformatica.com
Дата: 05.03.19 23:52
Оценка:
Здравствуйте, Vamp, Вы писали:

V>C++ 20 вводит модули. Они не спасут отца русской демократии?


Нет. Не спасут. Простая конструкция типа:

#include source "file.c"


является backward compatible — для любой существующей библиотеки можно создать lib.c / lib.cpp файл без изменения исходников самой библиотеки.
Re[3]: Хочу #include source "file.c"
От: c-smile Канада http://terrainformatica.com
Дата: 06.03.19 22:21
Оценка:
Здравствуйте, std.denis, Вы писали:

M>>что я туплю, в чем отличие от обычного #include?


SD>Также, например, как в MSVC можно указывать необходимые библиотеки, через #pragma comment(lib, "some.lib")


Именно, почему можно #pragma comment(lib, "some.lib"), но что мешает сделать #include source "some.lib.c" ?
Re[4]: Хочу #include source "file.c"
От: rg45 СССР  
Дата: 07.03.19 08:15
Оценка:
Здравствуйте, c-smile, Вы писали:

SD>>Также, например, как в MSVC можно указывать необходимые библиотеки, через #pragma comment(lib, "some.lib")


CS>Именно, почему можно #pragma comment(lib, "some.lib"), но что мешает сделать #include source "some.lib.c" ?


Я думаю, технически ничего не мешает, просто не особо востребовано, видимо. Да и не нужно забывать, что все "прагмы" — это специфика отдельных компиляторов.
--
Не можешь достичь желаемого — пожелай достигнутого.
Re[5]: Хочу #include source "file.c"
От: c-smile Канада http://terrainformatica.com
Дата: 07.03.19 20:46
Оценка:
Здравствуйте, rg45, Вы писали:

R>Здравствуйте, c-smile, Вы писали:


SD>>>Также, например, как в MSVC можно указывать необходимые библиотеки, через #pragma comment(lib, "some.lib")


CS>>Именно, почему можно #pragma comment(lib, "some.lib"), но что мешает сделать #include source "some.lib.c" ?


R>Я думаю, технически ничего не мешает, просто не особо востребовано, видимо. Да и не нужно забывать, что все "прагмы" — это специфика отдельных компиляторов.


Ну дык я и не прошу pragm'у.

Хватит простого #include source "src.c" и не надо будет городить огород с модулями, make и прочей лабудой.
Re[6]: Хочу #include source "file.c"
От: _NN_ www.nemerleweb.com
Дата: 12.03.19 07:07
Оценка:
>Хватит простого #include source "src.c" и не надо будет городить огород с модулями, make и прочей лабудой.

В чём отличие от #include ?
http://rsdn.nemerleweb.com
http://nemerleweb.com
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.