Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности

Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
|
17.02.2016, 14:37
|
|||
|---|---|---|---|
|
|||
Как скрыть исходник из компиляции |
|||
|
#18+
Доброго времени суток, всем заинтересованным. Ситуация следующая, имеется модуль в программе, который необходимо из неё исключить для того чтобы сделать дистриб приложения без этого функционала. Исключать решил с использованием условной директивы препроцессора #if..#endif в исходниках относящихся к этому модулю завязав на значение константы объявленной через #define. В итоге я добавил файл ConsistsModule.h в котором описал одну единственную константу: Код: plaintext 1. Далее подключаю его в заголовочном файле одного из исходников проекта, назовём его условно source1. И так имею тело source1.h: Код: plaintext 1. 2. 3. 4. 5. 6. Но тело реализации начинается вот с такого кода (source1.cpp): Код: plaintext 1. 2. 3. Т.е. я свою условную директиву смогу использовать только после того как подключено Код: plaintext 1. , а хотелось-бы обрамить весь исходник в тело этой условной директивы, вот так: Код: plaintext 1. 2. 3. 4. 5. 6. Но для того чтобы так сделать мне следует перед этим включить Код: plaintext 1. , что влечёт за собой включение ConsistsModule.h в source1.cpp тогда когда он уже включён в source1.h - двойной #include получается. Выход напрашивается в переносе в source1.cpp подключения #include source1.h выше чем Код: plaintext 1. 2. т.е. вместо текущего кода начала исходника source1.cpp: Код: plaintext 1. 2. 3. сделать вот так: #include "source1.h" #if WITHMODULE // Условия на компиляцию модуля #include <vcl.h> #pragma hdrstop ... // тело модуля #endif Отсюда вопрос - корректно-ли решение которое я представил, и чем это сулит, т.к. я по сути подставил "source1.h" и <vcl.h> под область действия #pragma hdrstop? Плохо понимаю, работу #pragma hdrstop, отсюда скорее этот вопрос и возник, т.к. не понимаю, что произойдёт после такой переделки. Ну и может подскажите как ещё можно исключать исходники из проекта, отличным от моего метода способом? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
17.02.2016, 15:12
|
|||
|---|---|---|---|
|
|||
Как скрыть исходник из компиляции |
|||
|
#18+
Не понятен смысл всех этих телодвижений. Лишний include, да еще включенный в предкомпилед headers ни время компиляции, ни размер результата особо не поменяет. IMHO & AFAIK ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
17.02.2016, 16:03
|
|||
|---|---|---|---|
Как скрыть исходник из компиляции |
|||
|
#18+
Nikolay Kormushkin... что влечёт за собой включение ConsistsModule.h в source1.cpp тогда когда он уже включён в source1.h - двойной #include получается. чтобы этого не было, пиши первой строкой каждого .h Код: plaintext 1. тогда включится только при первом упоминании, при последующих компилятор его проигнорирует. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
17.02.2016, 17:18
|
|||
|---|---|---|---|
|
|||
Как скрыть исходник из компиляции |
|||
|
#18+
Nikolay Kormushkinкорректно-ли решение которое я представил, и чем это сулит В общем случае решение некорректно и приведёт к ошибкам линковки для функций, вызываемых из других модулей. Обычно функционал из демо-версии выпиливают гораздо более точечно, заменяя на вывод сообщения, что "данный функционал недоступен" в конкретных обработчиках конкретных кнопок и пунктов меню. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
18.02.2016, 06:18
|
|||
|---|---|---|---|
Как скрыть исходник из компиляции |
|||
|
#18+
А в Борланде есть что-то типа настроек проекта? В студии можно указать в свойства проекта предефайны и вообще настроить профили сборки, куда включать-выключать (не)нужные файлы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
18.02.2016, 10:58
|
|||
|---|---|---|---|
Как скрыть исходник из компиляции |
|||
|
#18+
Дедский сат, штаныналямках, а не топик. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
18.02.2016, 12:46
|
|||
|---|---|---|---|
Как скрыть исходник из компиляции |
|||
|
#18+
MasterZiv, Погромистами не рождаются сразу! :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
18.02.2016, 15:28
|
|||
|---|---|---|---|
|
|||
Как скрыть исходник из компиляции |
|||
|
#18+
MasterZivДедский сат, штаныналямках, а не топик. Очень рад, что для Вас - это детский сад, только пользы от этого мало. Спасибо, всем откликнувшимся, назрел ещё один вопрос по #include-ам: Если в source1.h я добавил Код: plaintext 1. , далее в source1.cpp добавил Код: plaintext 1. , а в source2.h соответственно также добавлен Код: plaintext 1. , то будет-ли конфликт при линковке? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
18.02.2016, 15:37
|
|||
|---|---|---|---|
Как скрыть исходник из компиляции |
|||
|
#18+
Nikolay KormushkinMasterZivДедский сат, штаныналямках, а не топик. Очень рад, что для Вас - это детский сад, только пользы от этого мало. Спасибо, всем откликнувшимся, назрел ещё один вопрос по #include-ам: Если в source1.h я добавил..... то будет-ли конфликт при линковке? Линковка - процесс увязывания бинарного кода (и ресурсов). Конфликт - если у тебя в двух и более местах есть бинарный код с одним именем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
18.02.2016, 15:53
|
|||
|---|---|---|---|
|
|||
Как скрыть исходник из компиляции |
|||
|
#18+
SiemarglNikolay Kormushkinпропущено... ...то будет-ли конфликт при линковке? Линковка - процесс увязывания бинарного кода (и ресурсов). Конфликт - если у тебя в двух и более местах есть бинарный код с одним именем. Не воспринял, к сожалению, ответ применительно к примеру, будут-ли в этом случае бинарный код с одинаковым именем или нет, видимо потому, что плохо представляю себе процесс build-а и возможно, что использование слова "линковка" было тут лишним. Перефразирую наверно вопрос, на такой: Допустимо-ли так делать, как в приведённом примере, не вызовет-ли это ошибок при компиляции программы? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
18.02.2016, 16:56
|
|||
|---|---|---|---|
Как скрыть исходник из компиляции |
|||
|
#18+
Nikolay KormushkinДопустимо-ли так делать, как в приведённом примере, не вызовет-ли это ошибок при компиляции программы?если файл ConsistsModule.h защищён от двойного включения, то проблем не будет, если не защищён - будет куча непонятных ошибок. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
18.02.2016, 17:00
|
|||
|---|---|---|---|
Как скрыть исходник из компиляции |
|||
|
#18+
Nikolay KormushkinВыход напрашивается в переносе в source1.cpp подключения #include source1.h выше чем Код: plaintext 1. 2. это не нужно, спокойно можно после прагмы писать свой #include "ConsistsModule.h" и далее по тексту. Ничего страшного не случится. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
18.02.2016, 17:05
|
|||
|---|---|---|---|
Как скрыть исходник из компиляции |
|||
|
#18+
Nikolay KormushkinПлохо понимаю, работу #pragma hdrstopэто - предварительно откомпилированные заголовки ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
18.02.2016, 17:07
|
|||
|---|---|---|---|
Как скрыть исходник из компиляции |
|||
|
#18+
CEMbMasterZiv, Погромистами не рождаются сразу! :) Согласен, программистами становятся после прочтения много-много книжек по программированию. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
18.02.2016, 17:08
|
|||
|---|---|---|---|
Как скрыть исходник из компиляции |
|||
|
#18+
Уже писал 18830516 пиши первой строкой каждого .h Код: plaintext 1. и никаких проблем со вложенностью .h не будет. Тут нет ничего сложного в понимании. Перед компиляцией запускается препроцессор, который заменяет все #include на содержимое файлов. #include <my.h> означает вставить текст из файла my.h в это место. Если внутри my.h написано #include <my2.h> то туда вставится содержимое my2.h и т.д. пока все #include не исчезнут. Затем начинается компиляция. Чтобы содержимое my.h не вставилось несколько раз - напиши в нем #pragma once, это команда препроцессору вставлять содержимое только один раз, повторные #include <my.h> он проигнорирует. PS проверить просто, напиши дважды, если перестанет компилироваться - исправляй. Код: plaintext 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
19.02.2016, 00:59
|
|||
|---|---|---|---|
Как скрыть исходник из компиляции |
|||
|
#18+
а опцию компиляции -DWITHMODULE=false использовать не судьба? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
19.02.2016, 06:04
|
|||
|---|---|---|---|
Как скрыть исходник из компиляции |
|||
|
#18+
Nikolay Kormushkin, а в source2.h соответственно также добавлен #include ConsistsModule.hПо возможности надо избегать вставки хедеров в хедеры, лучше всё вставлять в cpp, где требуется. Хедеры должны быть максимально независимыми. MasterZivмного-много книжек по программированиюи много-много практического применения ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
19.02.2016, 12:57
|
|||
|---|---|---|---|
|
|||
Как скрыть исходник из компиляции |
|||
|
#18+
CEMbПо возможности надо избегать вставки хедеров в хедеры, лучше всё вставлять в cpp, где требуется. А потом начинается забавная игра "угадай в каком порядке и какие заголовки надо включить, чтобы эта хрень таки скомпилировалась", ага... Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
19.02.2016, 12:58
|
|||
|---|---|---|---|
Как скрыть исходник из компиляции |
|||
|
#18+
Dimitry SibiryakovCEMbПо возможности надо избегать вставки хедеров в хедеры, лучше всё вставлять в cpp, где требуется. А потом начинается забавная игра "угадай в каком порядке и какие заголовки надо включить, чтобы эта хрень таки скомпилировалась", ага... Да нет, он правильно сказал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|

start [/forum/topic.php?fid=57&tablet=1&tid=2018605]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
69ms |
get topic data: |
13ms |
get forum data: |
2ms |
get page messages: |
59ms |
get tp. blocked users: |
6ms |
| others: | 13ms |
| total: | 195ms |

| 0 / 0 |
