powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Как правильно подключить h- файлы?
37 сообщений из 37, показаны все 2 страниц
Как правильно подключить h- файлы?
    #39579570
AlekseySQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть желание сократить код, введя сокращенные названия типов. Поэтому создан нижеприведенный файл, который потом "заинклюден" ко ВСЕМ остальным файлам проекта:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
#include <QString>
#include <string>
#include <vector>
#include <regex>

typedef const QString cQString;
typedef const std::string cstring;
typedef const std::vector cvector;
typedef const std::regex cregex;
typedef const std::string::size_type csize_type;



Я правильно понимаю, что тем самым у меня сильно разбухает код, ведь директива "#include" рекурсивно вставляет исходных код string, vector и regex во все файлы моего проекта?

Какие последствия у такого подхода?
...
Рейтинг: 0 / 0
Как правильно подключить h- файлы?
    #39579573
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlekseySQL,

открой для себя
Код: plaintext
1.
using namespace std



include - текстовая вставка

компилятор/линкер дублирование уберут
...
Рейтинг: 0 / 0
Как правильно подключить h- файлы?
    #39579579
AlekseySQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SiemarglAlekseySQL,

открой для себя
Код: plaintext
1.
using namespace std



include - текстовая вставка

компилятор/линкер дублирование уберут

Дублирование то уберут, но мне не в каждом файле даже один раз нужны эти типы данных. Если развивать мой подход, то к каждому файлу по мере роста проекта будет подключена половина стандартной библиотеки + половина библиотеки Qt ...
...
Рейтинг: 0 / 0
Как правильно подключить h- файлы?
    #39579588
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
"подключено" - нет такого термина. говори корректно, иначе непонятно
...
Рейтинг: 0 / 0
Как правильно подключить h- файлы?
    #39579616
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlekseySQLсоздан нижеприведенный файл, который потом "заинклюден" ко ВСЕМ остальным файлам проекта:
Код: plaintext
1.
2.
3.
4.
#include <QString>
#include <string>
#include <vector>
#include <regex>

Я правильно понимаю, что тем самым у меня сильно разбухает код, ведь директива "#include" рекурсивно вставляет исходных код string, vector и regex во все файлы моего проекта?Странные пошли люди ...
Ведь достаточно открыть один-два нормальных заголовка и увидеть что-то вроде:
Код: plaintext
1.
2.
3.
4.
#ifndef _НЕЧТО_
#define _НЕЧТО_
...
#endif

Но, конечно, потратить часок на форуме гораздо проще, чем самому разбораться за пять минут.

P.S. Время компиляции - да, просядет.
Поэтому, лень должна быть обоснована, а не просто лень.
...
Рейтинг: 0 / 0
Как правильно подключить h- файлы?
    #39579617
AlekseySQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Siemargl"подключено" - нет такого термина. говори корректно, иначе непонятно

Директива "include" добавляет ("подключает") в исходный текст код, который расположен в указанном файле. Другими словами, итоговый код состоит из двух кусков программы: "подключенного" библиотечного и исходного. Если в исходные тексты программ с помощью include прописать все возможные библиотечные файлы, то исходные тексты по логике должны сильно распухнуть.

Вот про это собственно и вопрос: правильно ли я все понимаю и какие еще есть последствия у подобной практики.
...
Рейтинг: 0 / 0
Как правильно подключить h- файлы?
    #39579626
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlekseySQL,

больше время компиляции, ну и все
...
Рейтинг: 0 / 0
Как правильно подключить h- файлы?
    #39579631
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. SidorovВедь достаточно открыть один-два нормальных заголовка и увидеть что-то вроде:
Код: plaintext
1.
2.
3.
4.
#ifndef _НЕЧТО_
#define _НЕЧТО_
...
#endif


Можно короче
Код: plaintext
1.
#pragma once
...
Рейтинг: 0 / 0
Как правильно подключить h- файлы?
    #39579671
AlekseySQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima TBasil A. SidorovВедь достаточно открыть один-два нормальных заголовка и увидеть что-то вроде:
Код: plaintext
1.
2.
3.
4.
#ifndef _НЕЧТО_
#define _НЕЧТО_
...
#endif


Можно короче
Код: plaintext
1.
#pragma once



При подобных директивах препроцессор в КАЖДУЮ единицу компиляции включит файлы библиотек только по одному разу. Единицей компиляции в С++ является файл. Другими словами, как я и написал в каждый файл проекта по разу будет подключено куча библиотечных файлов.
...
Рейтинг: 0 / 0
Как правильно подключить h- файлы?
    #39579827
alex_k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlekseySQLЕсть желание сократить код, введя сокращенные названия типов.
Маленький SSD?
...
Рейтинг: 0 / 0
Как правильно подключить h- файлы?
    #39579843
AlekseySQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alex_kМаленький SSD?

Спасибо, поржал:)
...
Рейтинг: 0 / 0
Как правильно подключить h- файлы?
    #39579848
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TBasil A. SidorovВедь достаточно открыть один-два нормальных заголовка и увидеть что-то вроде:
Код: plaintext
1.
2.
3.
4.
#ifndef _НЕЧТО_
#define _НЕЧТО_
...
#endif


Можно короче
Код: plaintext
1.
#pragma once

Можно, но не стоит. Эта прагма не является универсальной для всех компиляторов.
...
Рейтинг: 0 / 0
Как правильно подключить h- файлы?
    #39579849
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlekseySQLDima Tпропущено...

Можно короче
Код: plaintext
1.
#pragma once



При подобных директивах препроцессор в КАЖДУЮ единицу компиляции включит файлы библиотек только по одному разу. Единицей компиляции в С++ является файл. Другими словами, как я и написал в каждый файл проекта по разу будет подключено куча библиотечных файлов.И это проблема? Тогда тебе стоит почитать про пре-компиляцию заголовков.
...
Рейтинг: 0 / 0
Как правильно подключить h- файлы?
    #39579851
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlЭта прагма не является универсальной для всех компиляторов.

Назови два, которые её не поддерживают. Древние версии - не в счёт.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как правильно подключить h- файлы?
    #39579858
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovWhite OwlЭта прагма не является универсальной для всех компиляторов.

Назови два, которые её не поддерживают. Древние версии - не в счёт.
Древние версии как раз "в счет". В больших конторах намного труднее идти в ногу с прогрессом и обновлять не то что компиляторы, но и ОС.
...
Рейтинг: 0 / 0
Как правильно подключить h- файлы?
    #39579861
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlДревние версии как раз "в счет". В больших конторах намного труднее идти в ногу с
прогрессом и обновлять не то что компиляторы, но и ОС.

ЕМНИП, MS VC стал поддерживать эту прагму в версии 2013, то есть пять лет назад. GCC - ещё
раньше. Тормозила только SUN Studio и BCC до перехода на clang.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как правильно подключить h- файлы?
    #39579875
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovЕМНИП, MS VC стал поддерживать эту прагму в версии 2013Согласно вики - с VS2003.
...
Рейтинг: 0 / 0
Как правильно подключить h- файлы?
    #39579900
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlekseySQL,

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

хорошая статейка
...
Рейтинг: 0 / 0
Как правильно подключить h- файлы?
    #39579906
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovWhite OwlДревние версии как раз "в счет". В больших конторах намного труднее идти в ногу с
прогрессом и обновлять не то что компиляторы, но и ОС.

ЕМНИП, MS VC стал поддерживать эту прагму в версии 2013, то есть пять лет назад. GCC - ещё
раньше. Тормозила только SUN Studio и BCC до перехода на clang.
А я вот до сих пор пишу для компилятора:
Код: plaintext
1.
$ /usr/vac/bin/xlc -qversion
C for AIX version 6.0.0.0$
И да, обновляться в планах есть... Вот уже вроде даже как решились... вроде бы... кажется...
...
Рейтинг: 0 / 0
Как правильно подключить h- файлы?
    #39579991
AlekseySQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kealon(Ruslan)AlekseySQL,

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

хорошая статейка

Честно говоря, статейка не по теме :)

Волнует не скорость компиляции (с которой борятся предкомпилируемые заголовки), а разбухание кода из- за добавление ненужных объявлений во все файлы проекта. Из- за этого ощущение, что понижается надежность кода.
...
Рейтинг: 0 / 0
Как правильно подключить h- файлы?
    #39580000
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlekseySQL,

такс, пойдём от определений
что вы называете размером кода? вывод после препроцессора? ну так это бред

автор#include" рекурсивно вставляет исходных код string, vector и regex во все файлы моего проекта? макросы если не используются то не вставляются. Вы боитесь что если вы в двух cpp-файлах будете использовать, например, std::vector то его код вставится в объектник к каждому cpp в котором он используется, а потом дубликаты не отрежутся линкёром?

надёжность кода зависит от программиста
...
Рейтинг: 0 / 0
Как правильно подключить h- файлы?
    #39580018
AlekseySQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kealon(Ruslan) Вы боитесь что если вы в двух cpp-файлах будете использовать, например, std::vector то его код вставится в объектник к каждому cpp в котором он используется, а потом дубликаты не отрежутся линкёром?


Да, именно этого я и боюсь:)
...
Рейтинг: 0 / 0
Как правильно подключить h- файлы?
    #39580083
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlekseySQL,

гугли extern template
...
Рейтинг: 0 / 0
Как правильно подключить h- файлы?
    #39580153
Вася Уткин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AlekseySQLkealon(Ruslan) Вы боитесь что если вы в двух cpp-файлах будете использовать, например, std::vector то его код вставится в объектник к каждому cpp в котором он используется, а потом дубликаты не отрежутся линкёром?


Да, именно этого я и боюсь:)
Это совсем копейки. На это следует обращать внимание только если программируешь под что-то намного меньше, чем дешевый смартфон.
И если вы просто накидали кучу include<> и не использовали (не инстанцировали) их классы и функции, то их код никуда не вставится и вообще не создастся.
...
Рейтинг: 0 / 0
Как правильно подключить h- файлы?
    #39580202
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlekseySQL
Я правильно понимаю, что тем самым у меня сильно разбухает код, ведь директива "#include" рекурсивно вставляет исходных код string, vector и regex во все файлы моего проекта?


Нет, неправильно.

AlekseySQLКакие последствия у такого подхода?

У такого подхода ужасные последствия.
во-первых, не зачем писать такие дурацкие псервдонимы, они только будут путать.
using -директивы хватило бы выше крыши.
Во-вторых, ты погляди, что ты там понаписал, и подумай, действительно ли ты этого хочешь...
...
Рейтинг: 0 / 0
Как правильно подключить h- файлы?
    #39580204
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlekseySQLSiemarglAlekseySQL,

открой для себя
Код: plaintext
1.
using namespace std



include - текстовая вставка

компилятор/линкер дублирование уберут

Дублирование то уберут, но мне не в каждом файле даже один раз нужны эти типы данных. Если развивать мой подход, то к каждому файлу по мере роста проекта будет подключена половина стандартной библиотеки + половина библиотеки Qt ...

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

В общем, все твои страхи -- это просто паранойя невежды.
Учи язык.
...
Рейтинг: 0 / 0
Как правильно подключить h- файлы?
    #39580205
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlekseySQLDima Tпропущено...

Можно короче
Код: plaintext
1.
#pragma once



При подобных директивах препроцессор в КАЖДУЮ единицу компиляции включит файлы библиотек только по одному разу. Единицей компиляции в С++ является файл. Другими словами, как я и написал в каждый файл проекта по разу будет подключено куча библиотечных файлов.

Ну и что? Шаблонный код например ДАЖЕ КОМПИЛИРОВАТЬСЯ НЕ БУДЕТ, если он не используется реально.
...
Рейтинг: 0 / 0
Как правильно подключить h- файлы?
    #39580206
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovWhite OwlЭта прагма не является универсальной для всех компиляторов.

Назови два, которые её не поддерживают. Древние версии - не в счёт.


Да её уже все поддерживают, но тем не менее в стандарте её нет....
...
Рейтинг: 0 / 0
Как правильно подключить h- файлы?
    #39580208
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlekseySQL...
Волнует ... разбухание кода из- за добавление ненужных объявлений во все файлы проекта.


Расскажи, что ты подразумеваешь под " разбуханием кода ", дай полное развёрнутое определение.

AlekseySQL Из- за этого ощущение, что понижается надежность кода.

Вообще полный бред...
...
Рейтинг: 0 / 0
Как правильно подключить h- файлы?
    #39580209
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan)AlekseySQL,

гугли extern template

да его не поддерживает никто уже...
...
Рейтинг: 0 / 0
Как правильно подключить h- файлы?
    #39580210
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlekseySQLkealon(Ruslan) Вы боитесь что если вы в двух cpp-файлах будете использовать, например, std::vector то его код вставится в объектник к каждому cpp в котором он используется, а потом дубликаты не отрежутся линкёром?


Да, именно этого я и боюсь:)

Не бойся, не вставится.
на это есть глобальная оптимизация.
"Вставится" (сгенерируется) много кода, когда ты один и тот же шаблон будешь использовать для разных параметров шаблона, например, использование std::vector для char, int, std::string, float, double сгенерирует код шаблона std::vector в пяти экземплярах, но только в объёме используемых методов во всех конкретных случаях.
...
Рейтинг: 0 / 0
Как правильно подключить h- файлы?
    #39580275
Фотография NekZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlekseySQLВолнует не скорость компиляции (с которой борятся предкомпилируемые заголовки), а разбухание кода из- за добавление ненужных объявлений во все файлы проекта. Из- за этого ощущение, что понижается надежность кода.
Прибрэхиваешь ты слегка.
Компилятор добавляет ссылки на символы, которые были необходимы в конкретной единице трансляции и помещает их в итоговый объектный файл, вместе со всеми инстанцированными шаблонными типами и функциями.
Когда ты собираешь исполняемый файл, линковщик идёт от точки входа по всем символам транзитивно (рекурсивно), выбирая только необходимые символы, которые будут включены в итоговую сборку, то есть, игнорирует те символы, на которые не было ссылок во время рекурсивного прохода, даже если это были символы из статических библиотек (архивов объектных файлов).
ЕМНИП с разделяемыми библиотеками дело обстоит иначе на разных тулчейнах.

Никакого раздувания тут не случится, если ты сам не захочешь, например, включить полностью статическую библиотеку в свою сборку опцией линковщика whole archive .
...
Рейтинг: 0 / 0
Как правильно подключить h- файлы?
    #39580276
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Аффтар, чем разводить беспокойство на пустом месте, давно бы уже включил генерацию
map-файла да и посмотрел какие символы и в каком количестве в него включены.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как правильно подключить h- файлы?
    #39580286
AlekseySQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MasterZiv, хорошо пробомбил :)
...
Рейтинг: 0 / 0
Как правильно подключить h- файлы?
    #39580427
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlekseySQLMasterZiv, хорошо пробомбил :)Это он сгоряча лупанул, не проверив. Проблема действительно есть, на гнусе точно
...
Рейтинг: 0 / 0
Как правильно подключить h- файлы?
    #39580491
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
простенькая проверка:

gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.5)
Release & Debug
a<>b
a=b
a=b
a<>b
a<>b
2


Microsoft Visual C++ 2015
Release
a=b
a=b
a=b
a=b
a=b
2

Debug
a<>b
a=b
a=b
a<>b
a<>b
2


С++ Builder 10.2 Update 1
Release & Debug
a<>b
a=b
a=b
a<>b
a<>b
2


интеловского нету
...
Рейтинг: 0 / 0
Как правильно подключить h- файлы?
    #39580619
Фотография CEMb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlekseySQL,

Если бы у тебя что-то включалось два раза, компилятор бы выругался, что у тебя два одинаковых определения чего-то.
С другой стороны, vector (и остальные контейнеры) - это шаблон, сам по себе он кода не образует.
...
Рейтинг: 0 / 0
37 сообщений из 37, показаны все 2 страниц
Форумы / C++ [игнор отключен] [закрыт для гостей] / Как правильно подключить h- файлы?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]