Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Программирование под Windows > Visual C++
Перезагрузить страницу Условная компиляция ifdef endif
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
Odin_KG Odin_KG вне форума
Member
 
Сообщений: 956
Сказал(а) спасибо: 0
Поблагодарили 17 раз(а) в 16 сообщениях
Регистрация: 28.01.2007
По умолчанию Условная компиляция ifdef endif - 07.04.2010, 03:33

Имеется программа, которая по сути включает в себя 3 программы, т.е. код общий, а по нему обильно разбросаны #ifdef...#endif, которые в зависимости от настроек проекта собирают разный результат. Есть ли какой-то автоматический способ выбросить из исходника весь лишний неиспользуемый код для текущей настройки проекта? Понимаю, что это странно, но это мне может понадобиться в случае передачи исходного кода заказчику. Т.е. заказчику не нужен лишний код в исходнике, так как он ему будет только мешать, а мне усложнять процесс подписания соглашений. Поэтому хотелось бы его просто автоматически удалить (руками это сделать невозможно - очень много). Т.е. текст программы желательно прогнать через какую-нибудь утилиту, чтобы все ненужные ветки #ifdef...#endif пропали. Есть ли такая утилита?
Ответить с цитированием
  (#2 (permalink)) Старый
Влад Влад вне форума
Специалист
 
Сообщений: 3,884
Сказал(а) спасибо: 1
Поблагодарили 25 раз(а) в 25 сообщениях
Регистрация: 27.06.2002
Адрес: Санкт-Петербург
По умолчанию 07.04.2010, 10:22

Препроцессор ?

Ну или такая утилита (алгоритм-то тривиальный; только не забудь про возможные вложенные #ifdef...#endif) пишется на C++/C# (я лично предпочел бы Шарп) за час-два, и вуаля.


The difference between theory and practice is that in theory, there is no difference between theory and practice, but in practice, there is.
Ответить с цитированием
  (#3 (permalink)) Старый
Odin_KG Odin_KG вне форума
Member
 
Сообщений: 956
Сказал(а) спасибо: 0
Поблагодарили 17 раз(а) в 16 сообщениях
Регистрация: 28.01.2007
По умолчанию 07.04.2010, 14:23

Цитата:
Препроцессор ?
Он. Но он ведь только компилирует, а из исходника ничего не выбрасывает.

Цитата:
Ну или такая утилита (алгоритм-то тривиальный; только не забудь про возможные вложенные #ifdef...#endif) пишется на C++/C# (я лично предпочел бы Шарп) за час-два, и вуаля.
Мне приходило в голову самому сделать, но не всё так просто. Условия бывают сложными типа: #if (defined(EXE) && defined(MAGIC_3D)) || defined(SCREENSAVER), да бывает еще и так:
Код:
#ifndef MAGIC_3D
#define MAGIC_3D
#endif
В общем так просто не получается. Нужно анализировать все файлы, потому что часть #define-ов включается в файлах. В результате я не вижу возможности сделать это запросто. Можно, конечно, начать кромсать код, чтобы упростить это дело, но как-то не хочется так сразу.
Ответить с цитированием
  (#4 (permalink)) Старый
Влад Влад вне форума
Специалист
 
Сообщений: 3,884
Сказал(а) спасибо: 1
Поблагодарили 25 раз(а) в 25 сообщениях
Регистрация: 27.06.2002
Адрес: Санкт-Петербург
По умолчанию 07.04.2010, 14:59

Не вполне так. Препроцессор, на самом деле, ничего не компилирует. Он - вставляет текст необходимых заголовков, вставляет/убирает все эти #ifdef....#endif и т.п., в результате чего получается файл, подаваемый уже на вход компилятору. Который и компилирует то, что ему подано на вход, собственно, генерируя машинный код. Каковой потом подается на вход линкеру.
Собственно, в VC++ (да и в других компиляторах/средах тоже) есть возможность получить каждый исходный файл (точнее, "единицу компиляции") после обработки его препроцессором. Смотри ключи комстроки и т.п. Это не то, что тебе нужно?


The difference between theory and practice is that in theory, there is no difference between theory and practice, but in practice, there is.
Ответить с цитированием
  (#5 (permalink)) Старый
Alexiski Alexiski на форуме
Любитель давать советы
 
Сообщений: 4,281
Сказал(а) спасибо: 27
Поблагодарили 54 раз(а) в 54 сообщениях
Регистрация: 16.10.2005
По умолчанию 08.04.2010, 00:20

Но ведь он еще и инклюды повключает
Ответить с цитированием
Ads.
  (#6 (permalink)) Старый
Влад Влад вне форума
Специалист
 
Сообщений: 3,884
Сказал(а) спасибо: 1
Поблагодарили 25 раз(а) в 25 сообщениях
Регистрация: 27.06.2002
Адрес: Санкт-Петербург
По умолчанию 08.04.2010, 11:31

Это верно; и это неприятное препятствие..... Честно говоря, я не знаю, как его легко обойти. И кроме этого, он еще раскрывает (подставляет) макросы.
Тогда остается только писать собственную утилиту?


The difference between theory and practice is that in theory, there is no difference between theory and practice, but in practice, there is.
Ответить с цитированием
  (#7 (permalink)) Старый
Odin_KG Odin_KG вне форума
Member
 
Сообщений: 956
Сказал(а) спасибо: 0
Поблагодарили 17 раз(а) в 16 сообщениях
Регистрация: 28.01.2007
По умолчанию 08.04.2010, 18:55

С собственной утилитой идея ясна, но универсальный вариант не является простой работой. Скорее всего, я пока этот вопрос просто оставлю до лучших времен. А если возникнет конкретная ситуация, то поуничтожаю в исходнике часть кода из ненужных веток руками - это сделает другую конфигурацию неработоспособной. Хотя... решение, конечно, не очень...
Ответить с цитированием
Ads
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Компиляция Deathmand Pascal 1 20.03.2012 12:14
Компиляция exe файла imported_Наська Prolog 11 20.05.2010 22:31
Директивы препроцессора #if,#ifdef,#endif leonid_z Eclipse 0 25.02.2010 20:39
Компиляция в маке shilgya Trolltech Qt 2 17.11.2007 15:08
Компиляция системных модулей Alek P.S. Delphi 9 13.11.2007 15:11
Что такое условная компиляция Kryuch С/С++ 2 05.10.2007 20:21
Условная компиляция #include "StdAfx.h" Odin_KG Visual C++ 4 08.06.2007 10:17
Компиляция Java в exe как это сделать Extremist Eclipse 0 15.11.2006 04:24
Компиляция проекта в Oracle buker Oracle 0 04.10.2005 15:03
Компиляция кода из VC++ DioGen C++ Builder 19 21.07.2005 20:11
Компиляция проектов VBA Rem Visual Basic 1 24.05.2004 15:25
Компиляция, создание exe Anonymous Алгоритмы 0 29.05.2003 01:05



Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Нardforum.ru - компьютерный форум и программирование, форум программистов