Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Как скрыть исходник из компиляции
|
|||
|---|---|---|---|
|
#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, 14:37 |
|
||
|
Как скрыть исходник из компиляции
|
|||
|---|---|---|---|
|
#18+
Не понятен смысл всех этих телодвижений. Лишний include, да еще включенный в предкомпилед headers ни время компиляции, ни размер результата особо не поменяет. IMHO & AFAIK ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2016, 15:12 |
|
||
|
Как скрыть исходник из компиляции
|
|||
|---|---|---|---|
|
#18+
Nikolay Kormushkin... что влечёт за собой включение ConsistsModule.h в source1.cpp тогда когда он уже включён в source1.h - двойной #include получается. чтобы этого не было, пиши первой строкой каждого .h Код: plaintext 1. тогда включится только при первом упоминании, при последующих компилятор его проигнорирует. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2016, 16:03 |
|
||
|
Как скрыть исходник из компиляции
|
|||
|---|---|---|---|
|
#18+
Nikolay Kormushkinкорректно-ли решение которое я представил, и чем это сулит В общем случае решение некорректно и приведёт к ошибкам линковки для функций, вызываемых из других модулей. Обычно функционал из демо-версии выпиливают гораздо более точечно, заменяя на вывод сообщения, что "данный функционал недоступен" в конкретных обработчиках конкретных кнопок и пунктов меню. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2016, 17:18 |
|
||
|
Как скрыть исходник из компиляции
|
|||
|---|---|---|---|
|
#18+
А в Борланде есть что-то типа настроек проекта? В студии можно указать в свойства проекта предефайны и вообще настроить профили сборки, куда включать-выключать (не)нужные файлы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2016, 06:18 |
|
||
|
Как скрыть исходник из компиляции
|
|||
|---|---|---|---|
|
#18+
Дедский сат, штаныналямках, а не топик. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2016, 10:58 |
|
||
|
Как скрыть исходник из компиляции
|
|||
|---|---|---|---|
|
#18+
MasterZiv, Погромистами не рождаются сразу! :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2016, 12:46 |
|
||
|
Как скрыть исходник из компиляции
|
|||
|---|---|---|---|
|
#18+
MasterZivДедский сат, штаныналямках, а не топик. Очень рад, что для Вас - это детский сад, только пользы от этого мало. Спасибо, всем откликнувшимся, назрел ещё один вопрос по #include-ам: Если в source1.h я добавил Код: plaintext 1. , далее в source1.cpp добавил Код: plaintext 1. , а в source2.h соответственно также добавлен Код: plaintext 1. , то будет-ли конфликт при линковке? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2016, 15:28 |
|
||
|
Как скрыть исходник из компиляции
|
|||
|---|---|---|---|
|
#18+
Nikolay KormushkinMasterZivДедский сат, штаныналямках, а не топик. Очень рад, что для Вас - это детский сад, только пользы от этого мало. Спасибо, всем откликнувшимся, назрел ещё один вопрос по #include-ам: Если в source1.h я добавил..... то будет-ли конфликт при линковке? Линковка - процесс увязывания бинарного кода (и ресурсов). Конфликт - если у тебя в двух и более местах есть бинарный код с одним именем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2016, 15:37 |
|
||
|
Как скрыть исходник из компиляции
|
|||
|---|---|---|---|
|
#18+
SiemarglNikolay Kormushkinпропущено... ...то будет-ли конфликт при линковке? Линковка - процесс увязывания бинарного кода (и ресурсов). Конфликт - если у тебя в двух и более местах есть бинарный код с одним именем. Не воспринял, к сожалению, ответ применительно к примеру, будут-ли в этом случае бинарный код с одинаковым именем или нет, видимо потому, что плохо представляю себе процесс build-а и возможно, что использование слова "линковка" было тут лишним. Перефразирую наверно вопрос, на такой: Допустимо-ли так делать, как в приведённом примере, не вызовет-ли это ошибок при компиляции программы? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2016, 15:53 |
|
||
|
Как скрыть исходник из компиляции
|
|||
|---|---|---|---|
|
#18+
Nikolay KormushkinДопустимо-ли так делать, как в приведённом примере, не вызовет-ли это ошибок при компиляции программы?если файл ConsistsModule.h защищён от двойного включения, то проблем не будет, если не защищён - будет куча непонятных ошибок. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2016, 16:56 |
|
||
|
Как скрыть исходник из компиляции
|
|||
|---|---|---|---|
|
#18+
Nikolay KormushkinВыход напрашивается в переносе в source1.cpp подключения #include source1.h выше чем Код: plaintext 1. 2. это не нужно, спокойно можно после прагмы писать свой #include "ConsistsModule.h" и далее по тексту. Ничего страшного не случится. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2016, 17:00 |
|
||
|
Как скрыть исходник из компиляции
|
|||
|---|---|---|---|
|
#18+
Nikolay KormushkinПлохо понимаю, работу #pragma hdrstopэто - предварительно откомпилированные заголовки ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2016, 17:05 |
|
||
|
Как скрыть исходник из компиляции
|
|||
|---|---|---|---|
|
#18+
CEMbMasterZiv, Погромистами не рождаются сразу! :) Согласен, программистами становятся после прочтения много-много книжек по программированию. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2016, 17:07 |
|
||
|
Как скрыть исходник из компиляции
|
|||
|---|---|---|---|
|
#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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2016, 17:08 |
|
||
|
Как скрыть исходник из компиляции
|
|||
|---|---|---|---|
|
#18+
а опцию компиляции -DWITHMODULE=false использовать не судьба? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2016, 00:59 |
|
||
|
Как скрыть исходник из компиляции
|
|||
|---|---|---|---|
|
#18+
Nikolay Kormushkin, а в source2.h соответственно также добавлен #include ConsistsModule.hПо возможности надо избегать вставки хедеров в хедеры, лучше всё вставлять в cpp, где требуется. Хедеры должны быть максимально независимыми. MasterZivмного-много книжек по программированиюи много-много практического применения ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2016, 06:04 |
|
||
|
Как скрыть исходник из компиляции
|
|||
|---|---|---|---|
|
#18+
CEMbПо возможности надо избегать вставки хедеров в хедеры, лучше всё вставлять в cpp, где требуется. А потом начинается забавная игра "угадай в каком порядке и какие заголовки надо включить, чтобы эта хрень таки скомпилировалась", ага... Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2016, 12:57 |
|
||
|
Как скрыть исходник из компиляции
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovCEMbПо возможности надо избегать вставки хедеров в хедеры, лучше всё вставлять в cpp, где требуется. А потом начинается забавная игра "угадай в каком порядке и какие заголовки надо включить, чтобы эта хрень таки скомпилировалась", ага... Да нет, он правильно сказал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2016, 12:58 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=39174547&tid=2018605]: |
0ms |
get settings: |
12ms |
get forum list: |
14ms |
check forum access: |
5ms |
check topic access: |
5ms |
track hit: |
61ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
60ms |
get tp. blocked users: |
1ms |
| others: | 16ms |
| total: | 190ms |

| 0 / 0 |
