открыть исходники без "мусора"
От: jyuyjiyuijyu  
Дата: 05.03.14 23:22
Оценка:
Всем привет

допустим в файле есть много грязного+отладочного+параноидального кода

#if _DEBUG

    ...

#endif


все хорошо релиз собирается без этого "мусора"

допустим я хочу открыть исходники без этого "мусора" (тоесть финальный вариант без грязного+отладочного+параноидального кода)

как в такой ситуации поступать ?

написать утилиту которая будет выкусывать все _DEBUG секции из файла ?

спасибо
Re: открыть исходники без "мусора"
От: LaptevVV Россия  
Дата: 06.03.14 01:53
Оценка:
Здравствуйте, jyuyjiyuijyu, Вы писали:

J>допустим я хочу открыть исходники без этого "мусора" (тоесть финальный вариант без грязного+отладочного+параноидального кода)

J>как в такой ситуации поступать ?
J>написать утилиту которая будет выкусывать все _DEBUG секции из файла ?
J>спасибо
Единицей трансляции в С++ является код после обработки его препроцессором.
В принципе у компилятора должен быть ключик типа вывести код после препроцессора.
Или просто пропустить код через препроцессор.
nixman тебе точно скажет.
Но писать точно ничего не нужно.
Правда в единица трансляции "раскрыты" и все инклюды.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[2]: открыть исходники без "мусора"
От: Ops Россия  
Дата: 06.03.14 07:05
Оценка: +4
Здравствуйте, LaptevVV, Вы писали:

LVV>Единицей трансляции в С++ является код после обработки его препроцессором.

LVV>В принципе у компилятора должен быть ключик типа вывести код после препроцессора.
LVV>Или просто пропустить код через препроцессор.
LVV>nixman тебе точно скажет.
LVV>Но писать точно ничего не нужно.
LVV>Правда в единица трансляции "раскрыты" и все инклюды.

Не, Лаптев, это будет куда большим куском мусора, чем изначальный код с отладочными кусками.
Я бы скрипт какой-нибудь сваял, благо разбор простой. Язык для скрипта — какой больше нравится/лучше знаешь.
Переубедить Вас, к сожалению, мне не удастся, поэтому сразу перейду к оскорблениям.
Re[2]: открыть исходники без "мусора"
От: Хреннос  
Дата: 06.03.14 07:05
Оценка: 11 (3) +1
Здравствуйте, LaptevVV, Вы писали:

LVV>Единицей трансляции в С++ является код после обработки его препроцессором.

LVV>В принципе у компилятора должен быть ключик типа вывести код после препроцессора.
LVV>Или просто пропустить код через препроцессор.
LVV>nixman тебе точно скажет.

Препроцессор называется cpp, тут и к nixmanу ходить не надо.

LVV>Но писать точно ничего не нужно.

LVV>Правда в единица трансляции "раскрыты" и все инклюды.

Не просто раскрыты инклюды, а еще и все символы и макросы, определенные через #define, будут заменены своими непосредственными значениями. Всякие __LINE__, __FILE__, etc — тоже.

Т.е. вместо чистого кода без дебага получится много-много килобайт неудобоваримой лапши в начале каждого файла, а потом пойдет собственно код с развернутыми макросами и дефайнами.

И кстати, полученный сырец станет платформо-зависимым, т.к. в него будут вкомпилены системные хедеры.

Писать конечно, ничего не надо, все уже написано до нас:

http://dotat.at/prog/unifdef/
http://sourceforge.net/projects/sunifdef/
Re[3]: открыть исходники без "мусора"
От: LaptevVV Россия  
Дата: 06.03.14 07:17
Оценка:
Здравствуйте, Ops, Вы писали:

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


LVV>>Единицей трансляции в С++ является код после обработки его препроцессором.

LVV>>В принципе у компилятора должен быть ключик типа вывести код после препроцессора.
LVV>>Или просто пропустить код через препроцессор.
LVV>>nixman тебе точно скажет.
LVV>>Но писать точно ничего не нужно.
LVV>>Правда в единица трансляции "раскрыты" и все инклюды.

Ops>Не, Лаптев, это будет куда большим куском мусора, чем изначальный код с отладочными кусками.

Ops>Я бы скрипт какой-нибудь сваял, благо разбор простой. Язык для скрипта — какой больше нравится/лучше знаешь.
Да, наверное, это будет лучше.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re: открыть исходники без "мусора"
От: k55 Ниоткуда  
Дата: 06.03.14 07:51
Оценка: +1
Здравствуйте, jyuyjiyuijyu, Вы писали:
Смотря какая цель.
Если просто посмотреть, то как минимум Eclipse (уверен что любая вменяемая среда позволяет делать это) меняет подсветку блоков кода который не учавствует в компиляции. Если задать __DEBUG = 0 в настройках то блок
#if __DEBUG
...
#endif
будет серого цвета. В новых версиях эти блоки можно свернуть.
Если есть желание — найдется 1000 возможностей.
Если нет желания — найдется 1000 причин.
Re: открыть исходники без "мусора"
От: Igore Россия  
Дата: 06.03.14 08:38
Оценка:
Здравствуйте, jyuyjiyuijyu, Вы писали:

Добавлю к предыдущим сообщениям про MSVC, Configuration Properties->C/C++->Preprocessor, "Preprocess to a File".
Re[2]: открыть исходники без "мусора"
От: niXman Ниоткуда https://github.com/niXman
Дата: 06.03.14 09:26
Оценка:
g++ -E <options> in.cpp > out.hpp

в out.hpp, правда, будет гораздо больше кода, из-за инклюдов. но это не страшно, т.к. твой код будет в конце
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
Re[3]: открыть исходники без "мусора"
От: jyuyjiyuijyu  
Дата: 06.03.14 09:47
Оценка:
вариант с обработкой стандартным препроцессором мне категорически не нравится...

так как в коде раскроются любые другие макросы вместе с выкусыванием кусков _DEBUG


нужен какой то механизм заточенный только на выдирание таких отладочных кусоков...
Re[4]: открыть исходники без "мусора"
От: watchmaker  
Дата: 06.03.14 10:26
Оценка:
Здравствуйте, jyuyjiyuijyu, Вы писали:

J>вариант с обработкой стандартным препроцессором мне категорически не нравится...


J>так как в коде раскроются любые другие макросы вместе с выкусыванием кусков _DEBUG


Выполнить условные директивы без раскрытия макросов можно если дополнительно указать ключ '-fdirectives-only'.
Впрочем, даже без раскрытия макросов получается та ещё портянка.
Re[3]: открыть исходники без "мусора"
От: jyuyjiyuijyu  
Дата: 06.03.14 12:37
Оценка:
Здравствуйте, Хреннос, Вы писали:

Х>http://dotat.at/prog/unifdef/

Х>http://sourceforge.net/projects/sunifdef/

нашел unifdef в исходниках... собрал...

вообщем вот тестовый файл

char* p;

#ifdef _DEBUG
ololo
#endif

int main()
{
}


натравливаем утилиту

unifdef -B -U_DEBUG test.cpp


на выходе получаем

char* p;

int main()
{
}




на первый взгляд делает то что нужно!!!

премного благодарен всем отписавшимся
Re[4]: открыть исходники без "мусора"
От: jyuyjiyuijyu  
Дата: 06.03.14 13:51
Оценка:
может кому пригодится

вообщем создаем такие разделы в реестре




этим самым создаем пункт в контекстном меню *.cpp файлов



стоит кликнуть этот пункт и unifdef удалит все _DEBUG из файла in-place


ВАЖНО!!!

утилита консольная и это вызывает появление консольного окна на доли секунды поэтому
собранный бинарик открываем в любом пе-вьювере и меняем подсистему с CUI на GUI или колдуем
так чтобы сразу собрать GUI
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.