Форум Микро-Чип
Поиск и заказ электронных компонентов
 

Вернуться   Форум Микро-Чип > Инструментарий

Инструментарий Тестеры, паяльники, осциллографы, программаторы, IDE.

Ответ
 
Опции темы Опции просмотра
Старый 23.11.2016, 10:20   #1
Pridnya
Senior Member
 
Регистрация: 21.01.2009
Адрес: Orel
Возраст: 38
Сообщений: 4,287
Вес репутации: 4216/115
Pridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond repute
По умолчанию Просмотр сишного кода после обработки директив условной компиляции

Здравствуйте!

Не знаю, как вопрос сформулировать, но попробую.
Есть клубок кода ("спагетти" в терминологии из книг по рефакторингу), называется LwIP-стек, в нем все запутано, в зависимости от множества директив условной компиляции в исходный код на языке Си включаются различные фрагменты кода. Есть директивы условной компиляции непосредственно касающиеся сетевой части стека, есть директивы для настройки стека в случае использования его с операционной системой или в случае без операционной системы. Есть многострочные макросы, есть даже многострочно-многофайловые макросы (когда макрос объявлен в одном файле, но он не завершен в нем, а часть его включается из другого файла в зависимости от настроек). Короче, сей код, хоть и работает, но он есть жутко несовершенный и похоже, что создатель сего кода не заинтересован в его рефакторинге. Хочется с этим кодом получше разобраться.

Вопрос: есть ли какие-то средства, чтобы просмотреть исходный код после обработки директив препроцессора, т.е. остановить сборку и посмотреть, что включилось в сишный код перед компиляцией? Или для этого нужно свою программу написать (с гибкими настройками, чтобы указать какие включения разворачивать в текст, а какие оставлять в виде, например #include<stdio.h>)?
__________________
Прогресс неизбежен.
Pridnya вне форума   Ответить с цитированием
Старый 23.11.2016, 11:45   #2
Pridnya
Senior Member
 
Регистрация: 21.01.2009
Адрес: Orel
Возраст: 38
Сообщений: 4,287
Вес репутации: 4216/115
Pridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond repute
По умолчанию Re: Просмотр сишного кода после обработки директив условной компиляции

Тихо сам с собою я веду беседу. Может, кому пригодится.
Есть такая возможность: можно обработать сишный код препроцессором (входит в состав компилятора) и вывести обработанный файл (с учетом директив условной компиляции и без комментариев) в другой сишный файл. Команда:
C:\armcc -E hello.c -o hello_prep.c
где
hello.c - исходный файл
-E - Preprocess the C source code only
-o <file> Name the final output file of the compilation
hello_prep.c - обработанный препроцессором файл

hello.c
Код:
 
#define CODE /* Comment 0 */
#undef CODE
/* Comment 1 */
void main(void)
{
/* Comment 2 */
int a = 0;
a += 1;
#ifdef CODE
/* Comment 3 */
a += 2;
#endif
a += 3;
}
hello_prep.c
Код:
 
void main(void)
{

int a = 0;
a += 1;




a += 3;
}
__________________
Прогресс неизбежен.
Pridnya вне форума   Ответить с цитированием
Старый 23.11.2016, 12:03   #3
Рак
Senior Member
 
Регистрация: 02.04.2008
Адрес: Кременчуг
Возраст: 31
Сообщений: 1,250
Вес репутации: 2068/66
Рак has a reputation beyond reputeРак has a reputation beyond reputeРак has a reputation beyond reputeРак has a reputation beyond reputeРак has a reputation beyond reputeРак has a reputation beyond reputeРак has a reputation beyond reputeРак has a reputation beyond reputeРак has a reputation beyond reputeРак has a reputation beyond reputeРак has a reputation beyond repute
По умолчанию Re: Просмотр сишного кода после обработки директив условной компиляции

Цитата:
Сообщение от Pridnya Посмотреть сообщение
Тихо сам с собою я веду беседу. Может, кому пригодится.
Есть такая возможность: можно обработать сишный код препроцессором (входит в состав компилятора) и вывести обработанный файл (с учетом директив условной компиляции и без комментариев) в другой сишный файл. Команда:
C:\armcc -E hello.c -o hello_prep.c
где
hello.c - исходный файл
-E - Preprocess the C source code only
-o <file> Name the final output file of the compilation
hello_prep.c - обработанный препроцессором файл

hello.c
Код:
 
#define CODE /* Comment 0 */
#undef CODE
/* Comment 1 */
void main(void)
{
/* Comment 2 */
int a = 0;
a += 1;
#ifdef CODE
/* Comment 3 */
a += 2;
#endif
a += 3;
}
hello_prep.c
Код:
 
void main(void)
{

int a = 0;
a += 1;




a += 3;
}
А смысл такое смотреть? В mplabx есть возможность "затенять" отключенные макросами части кода, netbeansом можно посмотреть.
P.S. Дима, в чем смысл такого глубокого изучения стека? Разобраться как работает до последнего байтика? У меня udp и tcp заработали из примера, добавил свой функционал и уже год как все работает без заминок.
Рак вне форума   Ответить с цитированием
Старый 23.11.2016, 12:34   #4
Pridnya
Senior Member
 
Регистрация: 21.01.2009
Адрес: Orel
Возраст: 38
Сообщений: 4,287
Вес репутации: 4216/115
Pridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond repute
По умолчанию Re: Просмотр сишного кода после обработки директив условной компиляции

Цитата:
Сообщение от Рак Посмотреть сообщение
А смысл такое смотреть? В mplabx есть возможность "затенять" отключенные макросами части кода, netbeansом можно посмотреть.
P.S. Дима, в чем смысл такого глубокого изучения стека? Разобраться как работает до последнего байтика? У меня udp и tcp заработали из примера, добавил свой функционал и уже год как все работает без заминок.
Что в NetBeans работает "затенение директивами условной компиляции неиспользуемого кода" я знаю, это удобно, я сам пользуюсь NetBeans 8.0.2. Копирую туда код из стека и смотрю.

Я еще глубоко его не изучил, мне бы пока из клубка кода выделить то, что я использую. И если такая возможность предусмотрена, значит люди пользуются. У меня тоже tcp и udp работает, и вместо udp я сейчас добавляю к стеку 1.3.2 файлы sntp.c и sntp.h из стека 2.0.0 RC2.

Хочется хоть немного понимать, что там включилось в код, что не включилось и с какими настройками. Мне все файлы не нужно смотреть. Кстати, можно и без командной строки обойтись, в настройках IDE есть галочки (см.скриншот), выбираем каталог для файлов листинга Listing\ и галочку, только в результирующем файле пустые строки не удалены - их может быть десятки-сотни, но это уж другой вопрос.

PS: Удалить пустые строки можно в Notepad++, но удаляет только пустые строки, "пустые" строки с табуляцией или пробелами не удаляет, а такие есть. Не считает их пустыми что ли.
Миниатюры
C Preprocessor Listing.PNG   Удалить пустые строки.PNG  
__________________
Прогресс неизбежен.

Последний раз редактировалось Pridnya; 23.11.2016 в 12:53.
Pridnya вне форума   Ответить с цитированием
Старый 23.11.2016, 13:55   #5
IceS
Super Moderator
 
Регистрация: 01.03.2007
Адрес: St. Petersburg
Возраст: 38
Сообщений: 3,236
Вес репутации: 3684/106
IceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond repute
Отправить сообщение для IceS с помощью ICQ
По умолчанию Re: Просмотр сишного кода после обработки директив условной компиляции

Цитата:
Сообщение от Pridnya Посмотреть сообщение
Хочется с этим кодом получше разобраться.

Вопрос: есть ли какие-то средства, чтобы просмотреть исходный код после обработки директив препроцессора,?
1. Что тебя все в дебри тянет? Тогда нужно начинать копать код в ДНК, а не сишные исходники, написанные толпой индусов, плохо разбирающихся в программировании. Работает, свою функцию выполняет? Ну и нах его, пусть работает, все на свете сам сделать не сможешь - жизни не хватит.
Тут же вспоминаю твою недавнюю тему с преобразователем USB<->4RS.

2. В настройках компилятора, обычно, есть галочка "листинг препроцессора" "preprocessor list" или типа того, он генерит файлы после обработки препроцессора, но до компиляции.
__________________
- Готово, мастер !!!
- Что готово ???
- Сломал ...
IceS вне форума   Ответить с цитированием
Старый 23.11.2016, 14:02   #6
siarzhuk
Member
 
Аватар для siarzhuk
 
Регистрация: 08.11.2014
Возраст: 46
Сообщений: 89
Вес репутации: 761/17
siarzhuk is a splendid one to beholdsiarzhuk is a splendid one to beholdsiarzhuk is a splendid one to beholdsiarzhuk is a splendid one to beholdsiarzhuk is a splendid one to beholdsiarzhuk is a splendid one to beholdsiarzhuk is a splendid one to behold
По умолчанию Re: Просмотр сишного кода после обработки директив условной компиляции

Цитата:
Сообщение от Pridnya Посмотреть сообщение
И если такая возможность предусмотрена, значит люди пользуются.
Аррхиполезнейшая опция, товагищи! © В.И.Ленин.

В Keil - опции проекта, вкладка Listings чекбокс C Preprocessor Listings. В папке с объектниками остаются файлы *.i для каждого компилируемого *.c файла. Держу включёнными всегда - как только от препроцессора начинает пахнуть мистикой - иду туда разбираться в причинах его несварений.

И это скорее не опциональная возможность - а промежуточный результат создания объектного файла. Препроцессор и компилятор - по сути разные "программы" - сначала "препроцессор" собирает из всех включаемых .h файлов один большой .c "файл", разворачивает макроподстановки и затем скармливает эту огромную портянку "компилятору". В кавычках - потому как сейчас это зачастую делается одной программой [а не каноничной связкой cpp.exe + cc.exe как отцы основатели завещали]
IDE, конечно, подсвечивает и затеняет на лету, но препроцессорный выхлоп в случае чего проясняет несколько более предметно. Да и человеческий гений безграничен - не всякий парсер кода за ним угонится.
siarzhuk вне форума   Ответить с цитированием
Старый 23.11.2016, 14:16   #7
Pridnya
Senior Member
 
Регистрация: 21.01.2009
Адрес: Orel
Возраст: 38
Сообщений: 4,287
Вес репутации: 4216/115
Pridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond repute
По умолчанию Re: Просмотр сишного кода после обработки директив условной компиляции

Цитата:
Сообщение от IceS Посмотреть сообщение
1. Что тебя все в дебри тянет? Тогда нужно начинать копать код в ДНК, а не сишные исходники, написанные толпой индусов, плохо разбирающихся в программировании.Работает, свою функцию выполняет? Ну и нах его, пусть работает, все на свете сам сделать не сможешь - жизни не хватит.
Это не дебри. Все в норме. Кстати, индусы не имеют отношения к этому стеку, его создал европеец (швед, у которого английский не родной) и другие европейцы его допиливают. А у индусов английский родной и код у них значительно лучше, потому, часто те самые европейцы придумали миф про "индусский код", который на самом деле не индусы написали. Надо же им с ними как-то бороться.

И если бы все работао как я хочу, то я бы не стал вникать. Вот попробуй интегрируй в проект c lwip_v1.3.2 и без RTOS поддержку протокола SNTP (два файла sntp.h и sntp.c из lwip_2.0.0 RC2), удивишься. Кроме этих двух файлов еще кое что придется делать.
Цитата:
Сообщение от IceS Посмотреть сообщение
Тут же вспоминаю твою недавнюю тему с преобразователем USB<->4RS.
С темой про преобразователи все решено:
STLAB U-620 - бытовой несертифицированный преобразователь USB-8RS232 с уровнями сигналов на RS232 чуть выше минимального (+/-6 вольт), стоимостью около 3 тыр.
UPort 1610-8 (MOXA) - промышленный сертифицированный преобразователь USB-8RS232 с уровнями сигналов на RS232 +/-12 вольт, стоимостью 21,6 тыр
Думаю, что вопросов из-за чего такая разница не будет.
Подключаемое оборудование было старым и расчитано было на уровни +/- 12 вольт, часть оборудования даже питалась от RS232.
Цитата:
Сообщение от IceS Посмотреть сообщение
2. В настройках компилятора, обычно, есть галочка "листинг препроцессора" "preprocessor list" или типа того, он генерит файлы после обработки препроцессора, но до компиляции.
Это я сам в предыдущем посте написал еще раньше (см. скриншот C Preprocessor Listing.PNG).
Цитата:
Сообщение от siarzhuk Посмотреть сообщение
Аррхиполезнейшая опция, товагищи! © В.И.Ленин.

В Keil - опции проекта, вкладка Listings чекбокс C Preprocessor Listings. В папке с объектниками остаются файлы *.i для каждого компилируемого *.c файла. Держу включёнными всегда - как только от препроцессора начинает пахнуть мистикой - иду туда разбираться в причинах его несварений.

И это скорее не опциональная возможность - а промежуточный результат создания объектного файла. Препроцессор и компилятор - по сути разные "программы" - сначала "препроцессор" собирает из всех включаемых .h файлов один большой .c "файл", разворачивает макроподстановки и затем скармливает эту огромную портянку "компилятору". В кавычках - потому как сейчас это зачастую делается одной программой [а не каноничной связкой cpp.exe + cc.exe как отцы основатели завещали]
IDE, конечно, подсвечивает и затеняет на лету, но препроцессорный выхлоп в случае чего проясняет несколько более предметно. Да и человеческий гений безграничен - не всякий парсер кода за ним угонится.
Согласен, опция полезная. Особенно в случае архитектуры LwIP-стека, которую можно сравнить с архитектурой 7-этажного дома одного товарища. Кстати, в нем даже жить можно (как LwIP-стек работает, так и в этом доме жить можно...от дождя и ветра он точно защитит). И сам создатель знает все его слабые места, где что добавить можно, где убрать, тонкости архитектуры...Еще на него можно (теоретически) проект нарисовать (добавить описание, как для LwIP созданное программой doxygen), к коммуникациям подключить...и вот он памятник LwIP-стеку.
Миниатюры
1455698662155171680.jpg  
__________________
Прогресс неизбежен.

Последний раз редактировалось Pridnya; 23.11.2016 в 14:31.
Pridnya вне форума   Ответить с цитированием
Старый 23.11.2016, 15:12   #8
IceS
Super Moderator
 
Регистрация: 01.03.2007
Адрес: St. Petersburg
Возраст: 38
Сообщений: 3,236
Вес репутации: 3684/106
IceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond repute
Отправить сообщение для IceS с помощью ICQ
По умолчанию Re: Просмотр сишного кода после обработки директив условной компиляции

Как-то меня тоже не устраивал как работает стек на TMSе, понимаешь спамил в сеть, когда обращались к не открытому порту :-).
Я так же доблестно боролся со стеком, нашел место где это делает - закоментил и был рад что спам пропал.
После этого писалась прога на ПиСи и там была обнаружена функция установки параметров стека для WinSock, называлась она помоему setsockopt. Так вот она это все и настраивает. Т.е. все что работает в стеке не так как хочется - через неё и настраивается. На то оно и IP стек с поддержкой сокетов.

PS кривость setsockopt растет еще из Unix, для которого эти сокеты и были придуманы изначально.

PPS не всегда нужно ковырять внутренности, чаще нужно читать описания и даташиты ;-).
__________________
- Готово, мастер !!!
- Что готово ???
- Сломал ...
IceS вне форума   Ответить с цитированием
Старый 23.11.2016, 15:33   #9
yeskela
Senior Member
 
Аватар для yeskela
 
Регистрация: 28.01.2010
Адрес: Новочеркасск
Возраст: 34
Сообщений: 1,065
Вес репутации: 3454/71
yeskela has a reputation beyond reputeyeskela has a reputation beyond reputeyeskela has a reputation beyond reputeyeskela has a reputation beyond reputeyeskela has a reputation beyond reputeyeskela has a reputation beyond reputeyeskela has a reputation beyond reputeyeskela has a reputation beyond reputeyeskela has a reputation beyond reputeyeskela has a reputation beyond reputeyeskela has a reputation beyond repute
По умолчанию Re: Просмотр сишного кода после обработки директив условной компиляции

Цитата:
Сообщение от Pridnya Посмотреть сообщение
PS: Удалить пустые строки можно в Notepad++, но удаляет только пустые строки, "пустые" строки с табуляцией или пробелами не удаляет, а такие есть. Не считает их пустыми что ли.
У моего (v6.5.5) это отдельный пункт меню. см. картинку

Или можно перед удалением пустых строк запустить замену ^\s*$ на пустую строку (режим замены - регулярные выражения). см вторую картинку
Миниатюры
2016-11-23 15_24_46-_new  1 - Notepad++.png   2016-11-23 15_30_29-Replace.png  
__________________
Отсутствие доступа в интернет с рабочего места очень замедляет работу. Наличие - полностью парализует её.
yeskela вне форума   Ответить с цитированием
Старый 23.11.2016, 15:48   #10
Pridnya
Senior Member
 
Регистрация: 21.01.2009
Адрес: Orel
Возраст: 38
Сообщений: 4,287
Вес репутации: 4216/115
Pridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond repute
По умолчанию Re: Просмотр сишного кода после обработки директив условной компиляции

Цитата:
Сообщение от IceS Посмотреть сообщение
Как-то меня тоже не устраивал как работает стек на TMSе, понимаешь спамил в сеть, когда обращались к не открытому порту :-).
Я так же доблестно боролся со стеком, нашел место где это делает - закоментил и был рад что спам пропал.
После этого писалась прога на ПиСи и там была обнаружена функция установки параметров стека для WinSock, называлась она помоему setsockopt. Так вот она это все и настраивает. Т.е. все что работает в стеке не так как хочется - через неё и настраивается. На то оно и IP стек с поддержкой сокетов.

PS кривость setsockopt растет еще из Unix, для которого эти сокеты и были придуманы изначально.

PPS не всегда нужно ковырять внутренности, чаще нужно читать описания и даташиты ;-).
WinSock это, наверное, из тех времен, когда программисты писали на WinAPI для Windows, 90-00 годы. С тех пор много времени прошло. Для Windows использую C# и NetFramework, код простой, что-то типа такого (инициализация, отправить, получить)
Код:
string IpAddr = "192.168.1.100";
int TcpPort = 9760; 
IPEndPoint ipep = new IPEndPoint(IPAddress.Parse(IpAddr), TcpPort);     
Socket server = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
    try
    {
            server.Connect(ipep);
            Console.WriteLine("Connected: " + "IpAddr=" + IpAddr + " " + "TcpPort=" + TcpPort );
    }
...
server.Send(Encoding.Default.GetBytes(input));
int recv = server.Receive(data);
Это я к тому, что для Windows с использованием современных средств разработки от Microsoft я могу и проблем особых нет. И кода такого полно, код простой и понятный и кстати в Microsoft индусов полно. Они простые вещи сложными абстракциями не преподносят (как швед с сотоварищами свой LwIP).

А вот в случае LwIP ситуация другая: стеком можно пользоваться тремя способами или тремя типами API, каждый из которых использует предыдущий уровень API. Я использую самый нижний уровень (Raw API без использования RTOS), два других уровня (в том числе уровень на котором можно использовать сокеты) предполагают использование RTOS. Кроме того в примерах к стеку идут файлы, которые нужно добавлять и настраивать (sntp.c...). Тот же sntp.c написан вроде как грамотно, всего два файла, но они зависят от другого кода.

Это я к тому, что я использую один из трех уровней, самый минимальный, но к проекту прикручен весь стек (большую часть файлов которого я не использую вообще) и в котором директивами условной компиляции настраивается весь стек. Вот я и хочу видеть что я использую.

PS: Беру один из файлов с использованием LwIP, получаю файл листинга, в нем 6700 строк, удаляю пустые строки (совсем пустые, а не строки с невидимыми символами - пробел и табуляция) - остается 1700 строк, в этих 1700 строках встречаются дубликаты (включить файл...и некоторое количество строк с невидимыми символами). Вот сейчас программу напишу, которая удаляет строки с невидимые символы и строки дубликаты (дубликаты в C# удаляются одной командой).
__________________
Прогресс неизбежен.

Последний раз редактировалось Pridnya; 23.11.2016 в 15:57.
Pridnya вне форума   Ответить с цитированием
Старый 23.11.2016, 19:04   #11
IceS
Super Moderator
 
Регистрация: 01.03.2007
Адрес: St. Petersburg
Возраст: 38
Сообщений: 3,236
Вес репутации: 3684/106
IceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond repute
Отправить сообщение для IceS с помощью ICQ
По умолчанию Re: Просмотр сишного кода после обработки директив условной компиляции

Цитата:
Сообщение от Pridnya Посмотреть сообщение
WinSock это, наверное, из тех времен, когда программисты писали на WinAPI для Windows, 90-00 годы. С тех пор много времени прошло. Для Windows использую C# и NetFramework, код простой, что-то типа такого (инициализация, отправить, получить)
Код:
string IpAddr = "192.168.1.100";
int TcpPort = 9760; 
IPEndPoint ipep = new IPEndPoint(IPAddress.Parse(IpAddr), TcpPort);     
Socket server = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
    try
    {
            server.Connect(ipep);
            Console.WriteLine("Connected: " + "IpAddr=" + IpAddr + " " + "TcpPort=" + TcpPort );
    }
...
server.Send(Encoding.Default.GetBytes(input));
int recv = server.Receive(data);
Это я к тому, что для Windows с использованием современных средств разработки от Microsoft я могу и проблем особых нет. И кода такого полно, код простой и понятный и кстати в Microsoft индусов полно. Они простые вещи сложными абстракциями не преподносят (как швед с сотоварищами свой LwIP).
Да, да, да, я тоже так думал когда начинал писать софт для ПиСишки. Но когда я уткнулся, что компонент (дельфевый) шлет UDPшный поток со скорость 1000 пакетов в секунду и больше его никак не заставить слать "нормально" с темпом поступления данных, а не по таймеру - спасло только юзанье сокетов напрямую, благо что компонент возвращает указатель на сокет и дальше с ним можно работать через API. Т.о. получается мешанина из апишных обращений и высокоуровневых.
__________________
- Готово, мастер !!!
- Что готово ???
- Сломал ...
IceS вне форума   Ответить с цитированием
Старый 23.11.2016, 20:57   #12
DimaS
Senior Member
 
Регистрация: 05.04.2008
Адрес: Israel
Возраст: 44
Сообщений: 1,256
Вес репутации: 1557/61
DimaS has a brilliant futureDimaS has a brilliant futureDimaS has a brilliant futureDimaS has a brilliant futureDimaS has a brilliant futureDimaS has a brilliant futureDimaS has a brilliant futureDimaS has a brilliant futureDimaS has a brilliant futureDimaS has a brilliant futureDimaS has a brilliant future
По умолчанию Re: Просмотр сишного кода после обработки директив условной компиляции

Цитата:
Сообщение от Pridnya Посмотреть сообщение

Вопрос: есть ли какие-то средства, чтобы просмотреть исходный код после обработки директив препроцессора, т.е. остановить сборку и посмотреть, что включилось в сишный код перед компиляцией?
Эклипс умеет, хотя иногда и лажается на #ifdef-ах.
DimaS вне форума   Ответить с цитированием
Старый 24.11.2016, 09:49   #13
Pridnya
Senior Member
 
Регистрация: 21.01.2009
Адрес: Orel
Возраст: 38
Сообщений: 4,287
Вес репутации: 4216/115
Pridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond repute
По умолчанию Re: Просмотр сишного кода после обработки директив условной компиляции

Цитата:
Сообщение от yeskela Посмотреть сообщение
У моего (v6.5.5) это отдельный пункт меню. см. картинку

Или можно перед удалением пустых строк запустить замену ^\s*$ на пустую строку (режим замены - регулярные выражения). см вторую картинку
У меня в Notepad++ v7.2.1 (вчера скачал, до этого была 5.6.8) есть такая функция (удалить пустые строки содержащие пробелы), она удаляет не только строки из пробелов, но и из символов табуляции и пробелов-табуляции. Полезная функция. Вот интересно, а Notepad++ не умеет из командной строки выполнять эту операцию? Тогда можно было бы после препроцессора перед компиляцией добавить удаление пустых строк для всего проекта (функцией пользователя).
Что получается:
447 строк в исходнике (с комментариями и макросами)
6377 строк после препроцессора.
1237 строк после удаления пустых строк
929 строк после удаления пустых строк из пробелов и табов
Из этих 929 строк большая часть строк от включения заголовочных файлов стандартных библиотек (очень много дублей включения) и прототипы их функций, а также всякие переменные из других файлов:
Код:
#line 1 "..\\lwip_v1.3.2\\port\\STM32F4x7\\arch/cc.h"
#line 1 "..\\lwip_v1.3.2\\port\\STM32F4x7\\arch/cpu.h"
#line 36 "..\\lwip_v1.3.2\\port\\STM32F4x7\\arch/cc.h"
...
#line 185 "..\\include\\string.h"
extern __declspec(__nothrow) void *memchr(const void *  , int  , size_t  ) __attribute__((__nonnull__(1)));
...
#line 38 "..\\include\\stdio.h"
...
typedef struct __FILE FILE;
extern FILE __stdin, __stdout, __stderr;
Код:
#line 39 "..\\lwip_v1.3.2\\src\\include\\lwip/stats.h"
#line 151 "..\\lwip_v1.3.2\\src\\include\\lwip/stats.h"
#line 159 "..\\lwip_v1.3.2\\src\\include\\lwip/stats.h"
#line 167 "..\\lwip_v1.3.2\\src\\include\\lwip/stats.h"
#line 175 "..\\lwip_v1.3.2\\src\\include\\lwip/stats.h"
#line 183 "..\\lwip_v1.3.2\\src\\include\\lwip/stats.h"
#line 191 "..\\lwip_v1.3.2\\src\\include\\lwip/stats.h"
#line 199 "..\\lwip_v1.3.2\\src\\include\\lwip/stats.h"
#line 207 "..\\lwip_v1.3.2\\src\\include\\lwip/stats.h"
#line 215 "..\\lwip_v1.3.2\\src\\include\\lwip/stats.h"
#line 233 "..\\lwip_v1.3.2\\src\\include\\lwip/stats.h"
#line 251 "..\\lwip_v1.3.2\\src\\include\\lwip/stats.h"
#line 261 "..\\lwip_v1.3.2\\src\\include\\lwip/stats.h"
#line 278 "..\\lwip_v1.3.2\\src\\include\\lwip/stats.h"
Сам файл исходника начинается с 722-929 строка, т.е. всего 207 строк (без внешних переменных и функций). Это уже хорошо.
Миниатюры
Notepad++ v7.2.1.PNG  
__________________
Прогресс неизбежен.
Pridnya вне форума   Ответить с цитированием
Старый 24.11.2016, 11:34   #14
Pridnya
Senior Member
 
Регистрация: 21.01.2009
Адрес: Orel
Возраст: 38
Сообщений: 4,287
Вес репутации: 4216/115
Pridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond repute
По умолчанию Re: Просмотр сишного кода после обработки директив условной компиляции

Интересный момент: не пойму, зачем в исходниках переносить часть объявления прототипа на вторую-третью строку (неужели у автора монитор 13" по диагонали? Прототип на треть монитора и на три строки, какой в этом смысл? ), если потом в файле листинга получаем то же самое.
Парсеру (программа) неудобно получается анализировать листинг. Было бы удобнее, если бы прототип был в одной строке - проще искать и удалять (если нужно).
Цитата:
#line 147 "..\\lwip_v1.3.2\\src\\include\\ipv4\\lwip/ip.h"
#line 155 "..\\lwip_v1.3.2\\src\\include\\ipv4\\lwip/ip.h"
extern struct netif *current_netif;
extern const struct ip_hdr *current_header;
struct netif *ip_route(struct ip_addr *dest);
err_t ip_input(struct pbuf *p, struct netif *inp);
err_t ip_output(struct pbuf *p, struct ip_addr *src, struct ip_addr *dest,
u8_t ttl, u8_t tos, u8_t proto);
err_t ip_output_if(struct pbuf *p, struct ip_addr *src, struct ip_addr *dest,
u8_t ttl, u8_t tos, u8_t proto,
struct netif *netif);

#line 178 "..\\lwip_v1.3.2\\src\\include\\ipv4\\lwip/ip.h"
#line 191 "..\\lwip_v1.3.2\\src\\include\\ipv4\\lwip/ip.h"
В файлах из стандартных библиотек перенос протипа на следующую строку используется если он очень длинный - почти на весь монитор:
Цитата:
extern __declspec(__nothrow) void *memmove(void * ,
const void * , size_t ) __attribute__((__nonnull__(1,2)));
extern __declspec(__nothrow) char *strcpy(char * __restrict , const char * __restrict ) __attribute__((__nonnull__(1,2)));
extern __declspec(__nothrow) char *strncpy(char * __restrict , const char * __restrict , size_t ) __attribute__((__nonnull__(1,2)));
__________________
Прогресс неизбежен.

Последний раз редактировалось Pridnya; 24.11.2016 в 11:47.
Pridnya вне форума   Ответить с цитированием
Старый 24.11.2016, 14:18   #15
Pridnya
Senior Member
 
Регистрация: 21.01.2009
Адрес: Orel
Возраст: 38
Сообщений: 4,287
Вес репутации: 4216/115
Pridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond repute
По умолчанию Re: Просмотр сишного кода после обработки директив условной компиляции

Вот, посмотрите, как многострочный незавершенный макрос с включением другого файла с директивами () превращается в читаемый вид:
Код:
typedef enum {
#define LWIP_MEMPOOL(name,num,size,desc)  MEMP_##name,
#include "lwip/memp_std.h"
  MEMP_MAX
} memp_t;
Страшный макрос (порождающие новые имена с помощью склейки ##) превращается в короткое перечисление:
Код:
typedef enum {
MEMP_RAW_PCB,
MEMP_UDP_PCB,
MEMP_TCP_PCB,
MEMP_TCP_PCB_LISTEN,
MEMP_TCP_SEG,
MEMP_REASSDATA,
MEMP_ARP_QUEUE,
MEMP_PBUF,
MEMP_PBUF_POOL,
  MEMP_MAX
} memp_t;
Т.е. заглянуть в файлы на выходе препроцессора полезно.
__________________
Прогресс неизбежен.

Последний раз редактировалось Pridnya; 24.11.2016 в 14:23.
Pridnya вне форума   Ответить с цитированием
Старый 24.11.2016, 14:26   #16
IceS
Super Moderator
 
Регистрация: 01.03.2007
Адрес: St. Petersburg
Возраст: 38
Сообщений: 3,236
Вес репутации: 3684/106
IceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond repute
Отправить сообщение для IceS с помощью ICQ
По умолчанию Re: Просмотр сишного кода после обработки директив условной компиляции

Цитата:
Сообщение от Pridnya Посмотреть сообщение
Вот, посмотрите, как многострочный незавершенный макрос с включением другого файла с директивами () превращается в читаемый вид:
...
Т.е. заглянуть в файлы на выходе препроцессора полезно.
Я не могу понять, ты жалуешься на трудности понимания, или хвастаешься что смог разобраться в этих трудностях?
Я чета не улавливаю смысла в твоих сообщениях.
Ну да, макрос. Ну да, разворачивается.
"Ну и чё?" (С) Анек.

PS с таким же успехом можно по абзацам Кернигана и Ричи цитировать. Каждый день по паре абзацев - за год в книгу уложишься, и все тебя будут считать очень умным и прекрасно владеющим языком Си.
PPS А так это больше походит на беседу сумасшедшего самого с собой: что-то написал, потом сам себе ответил...
__________________
- Готово, мастер !!!
- Что готово ???
- Сломал ...
IceS вне форума   Ответить с цитированием
Старый 24.11.2016, 14:39   #17
Pridnya
Senior Member
 
Регистрация: 21.01.2009
Адрес: Orel
Возраст: 38
Сообщений: 4,287
Вес репутации: 4216/115
Pridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond repute
По умолчанию Re: Просмотр сишного кода после обработки директив условной компиляции

Цитата:
Сообщение от IceS Посмотреть сообщение
Я не могу понять, ты жалуешься на трудности понимания, или хвастаешься что смог разобраться в этих трудностях?
Я чета не улавливаю смысла в твоих сообщениях.
Ну да, макрос. Ну да, разворачивается.
"Ну и чё?" (С) Анек.

PS с таким же успехом можно по абзацам Кернигана и Ричи цитировать. Каждый день по паре абзацев - за год в книгу уложишься, и все тебя будут считать очень умным и прекрасно владеющим языком Си.
PPS А так это больше походит на беседу сумасшедшего самого с собой: что-то написал, потом сам себе ответил...
Хвастаться пока особо нечем. Есть несколько мыслей: клубок кода после препроцессора преобразуется в читаемый вид (по крайней мере его можно получить - читаемый код), но мы этого не видим (швед скрыл от нас, но это не вопрос), затем этот код компилируется. Я хочу понять этот клубок, как он устроен ( этот черный ящик). Часть алгоритма уже есть (как из клубка получить хорошо читаемый компактный код, даже кажется, что и у шведа есть какая-нибудь утилита для этого и есть пакер для всех остальных).

Может, кто-то еще подключится (еще один сумасшедший). Все мы сумасшедшие и каждый в своей области, кто-то больше, кто-то меньше. В любом случае польза есть: может, через полгода-год появится хоть один сумасшедший с которым можно поговорить на интересующую тему. А пока один-три человека. Печально.
__________________
Прогресс неизбежен.
Pridnya вне форума   Ответить с цитированием
Старый 24.11.2016, 14:41   #18
IceS
Super Moderator
 
Регистрация: 01.03.2007
Адрес: St. Petersburg
Возраст: 38
Сообщений: 3,236
Вес репутации: 3684/106
IceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond repute
Отправить сообщение для IceS с помощью ICQ
По умолчанию Re: Просмотр сишного кода после обработки директив условной компиляции

2Pridnya
Ты лучше вместо пустого сотрясания воздуха и безперспективного тыкания в кнопки клавиатуры напиши статью или книгу "как я разбирался в исходниках lwIP, написанных бездарными програмистами".
Это будет более интересно и полезно, чем твои "вырванные из контекста" посты.
Все что ты на эту тему пишешь - это обычные действия, которые 99% завсегдатаев форума решали и решают постоянно и им они не кажутся чем то сверх сложным и не достижимым.

PS
- ну разобрался ты с макросами - молодец.
- открыл для себя чудный мир листинга предпроцессора? замечательно!
- а сколько еще интересного и удивительного ждет тебя в мире файла "скрипт линкера" - я тебе не смогу передать.
__________________
- Готово, мастер !!!
- Что готово ???
- Сломал ...
IceS вне форума   Ответить с цитированием
Старый 24.11.2016, 14:42   #19
IceS
Super Moderator
 
Регистрация: 01.03.2007
Адрес: St. Petersburg
Возраст: 38
Сообщений: 3,236
Вес репутации: 3684/106
IceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond repute
Отправить сообщение для IceS с помощью ICQ
По умолчанию Re: Просмотр сишного кода после обработки директив условной компиляции

Цитата:
Сообщение от Pridnya Посмотреть сообщение
Хвастаться пока особо нечем. Есть несколько мыслей: клубок кода после препроцессора преобразуется в читаемый вид (по крайней мере его можно получить - читаемый код), но мы этого не видим (швед скрыл от нас, но это не вопрос), затем этот код компилируется. Я хочу понять этот клубок, как он устроен ( этот черный ящик).

Может, кто-то еще подключится (еще один сумасшедший). Все мы сумасшедшие и каждый в своей области, кто-то больше, кто-то меньше. В любом случае польза есть: может, через полгода-год появится хоть один сумасшедший с которым можно поговорить на интересующую тему. А пока один-три человека. Печально.
Честно говоря есть более интересные и важные вещи, чем разбираться в это коде.
__________________
- Готово, мастер !!!
- Что готово ???
- Сломал ...
IceS вне форума   Ответить с цитированием
Старый 24.11.2016, 14:52   #20
Pridnya
Senior Member
 
Регистрация: 21.01.2009
Адрес: Orel
Возраст: 38
Сообщений: 4,287
Вес репутации: 4216/115
Pridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond repute
По умолчанию Re: Просмотр сишного кода после обработки директив условной компиляции

Цитата:
Сообщение от IceS Посмотреть сообщение
Честно говоря есть более интересные и важные вещи, чем разбираться в это коде.
Я этот код использую и должен знать как он работает.
Цитата:
Сообщение от IceS Посмотреть сообщение
2Pridnya
Ты лучше вместо пустого сотрясания воздуха и безперспективного тыкания в кнопки клавиатуры напиши статью или книгу "как я разбирался в исходниках lwIP, написанных бездарными програмистами".
Это будет более интересно и полезно, чем твои "вырванные из контекста" посты.
Швед не такой уж бездарный, если в течении 15 лет сопровождает (выращивает) проект (и LwIP и uIP), думаю что еще и продает техподдержку сам или через кого-то. И запаковать код в клубок он смог и этот клубок только в последние годы удалось хоть как-то документировать, при этом последняя версия 2.0.0 значительно отличается от 1.3.2.

А что конкретно вырвано из контекста?
Цитата:
Сообщение от IceS Посмотреть сообщение
Все что ты на эту тему пишешь - это обычные действия, которые 99% завсегдатаев форума решали и решают постоянно и им они не кажутся чем то сверх сложным и не достижимым.
Может в своих проектах кто и смотрит, но в том же lwIP мало кто. Да и спросить по LwIP почти не у кого, даже на электрониксе. Последний раз спрашивал ответили трое:
один: все могу, все есть, ничего не покажу, начальник ругать будет;
второй: все просто...(а сам даже название темы не читал);
третий: немного по делу.
__________________
Прогресс неизбежен.
Pridnya вне форума   Ответить с цитированием
Старый 24.11.2016, 15:46   #21
siarzhuk
Member
 
Аватар для siarzhuk
 
Регистрация: 08.11.2014
Возраст: 46
Сообщений: 89
Вес репутации: 761/17
siarzhuk is a splendid one to beholdsiarzhuk is a splendid one to beholdsiarzhuk is a splendid one to beholdsiarzhuk is a splendid one to beholdsiarzhuk is a splendid one to beholdsiarzhuk is a splendid one to beholdsiarzhuk is a splendid one to behold
По умолчанию Re: Просмотр сишного кода после обработки директив условной компиляции

Цитата:
Сообщение от Pridnya Посмотреть сообщение
Интересный момент: не пойму, зачем в исходниках переносить часть объявления прототипа на вторую-третью строку
В общем-то для красоты. В некоторых проектах требование умещать всё в не более чем 80 символов по ширине входит в кодестайл требования. Цифра 80, подобно ширине пары задниц древнеримских коней в дорожных стандартах, полагаю, восходит к типовым величинам горизонтального разрешения "античных" железных терминалов. Что, в эпоху когда самые красноглазые из красноглазых линуксойдов админят свои тазики сидя в графических десктоп-менеджерах, и вправду весьма экстравагантно.
Что самое забавное, унаследовав привычку к подобному кодестайлу из проекта в котором угораздило было подвизаться, не спешу от неё отказываться, так как нахожу его лично удобным для восприятия и повседневной работы с текстом.
siarzhuk вне форума   Ответить с цитированием
Старый 25.11.2016, 08:43   #22
Pridnya
Senior Member
 
Регистрация: 21.01.2009
Адрес: Orel
Возраст: 38
Сообщений: 4,287
Вес репутации: 4216/115
Pridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond repute
По умолчанию Re: Просмотр сишного кода после обработки директив условной компиляции

Цитата:
Сообщение от siarzhuk Посмотреть сообщение
В общем-то для красоты. В некоторых проектах требование умещать всё в не более чем 80 символов по ширине входит в кодестайл требования. Цифра 80, подобно ширине пары задниц древнеримских коней в дорожных стандартах, полагаю, восходит к типовым величинам горизонтального разрешения "античных" железных терминалов. Что, в эпоху когда самые красноглазые из красноглазых линуксойдов админят свои тазики сидя в графических десктоп-менеджерах, и вправду весьма экстравагантно.
Что самое забавное, унаследовав привычку к подобному кодестайлу из проекта в котором угораздило было подвизаться, не спешу от неё отказываться, так как нахожу его лично удобным для восприятия и повседневной работы с текстом.
Согласен, что есть некоторое удобство. Но я когда-то специально покупал широкий монитор с мыслью, что он будет использоваться для просмотра исходников. Не смотря на широкий монитор, та же командная строка Windows (MS-DOS-овское окошко) имеет ширину всего 80 символов.
Цитата:
Сообщение от IceS Посмотреть сообщение
Все что ты на эту тему пишешь - это обычные действия, которые 99% завсегдатаев форума решали и решают постоянно и им они не кажутся чем то сверх сложным и не достижимым.
Ну тогда, может быть, завсегдатаи форума, которые каждый день используют эти обычные действия поделятся со мной и всеми другими товарищами утилитой с помощью которой они (используя её как команду пользователя в настройках проекта) удаляют из всех файлов листинга *.i пустые строки и строки, содержащие пробелы. Неохота самому писать, если все пользуются, может, один я не знаю. Эти файлы листинга содержат тысячи пустых строк.

Кому интересно - вот в архиве файлы листинга для файлов самого LwIP-стека можете посмотреть их содержимое. Уж очень не хочется каждый раз вручную удалять пустые строки в интересующих файла.

Кому интересен сам алгоритм, то нужно в каталоге Listing\ найти все *.i файлы и удалить из них все пустые строки (просто пустые и строки состоящие только из пробелов и символов табуляции). Завсегдатаи, поделитесь пожалуйста. Может, еще кому пригодится. Если никто не поделится, то придется самому написать и поделиться с сообществом.
Миниатюры
Команда пользователя.PNG  
Вложения
Тип файла: zip LwIP Listing.zip (156.2 Кб, 3 просмотров)
__________________
Прогресс неизбежен.

Последний раз редактировалось Pridnya; 25.11.2016 в 08:49.
Pridnya вне форума   Ответить с цитированием
Старый 25.11.2016, 09:36   #23
Vovka
Senior Member
 
Аватар для Vovka
 
Регистрация: 27.12.2007
Адрес: недалеко от г.Белгорода
Возраст: 49
Сообщений: 1,745
Вес репутации: 2479/76
Vovka has a reputation beyond reputeVovka has a reputation beyond reputeVovka has a reputation beyond reputeVovka has a reputation beyond reputeVovka has a reputation beyond reputeVovka has a reputation beyond reputeVovka has a reputation beyond reputeVovka has a reputation beyond reputeVovka has a reputation beyond reputeVovka has a reputation beyond reputeVovka has a reputation beyond repute
Отправить сообщение для Vovka с помощью ICQ
Smile Re: Просмотр сишного кода после обработки директив условной компиляции

Цитата:
Сообщение от Pridnya Посмотреть сообщение
....
нужно в каталоге Listing\ найти все *.i файлы и удалить из них все пустые строки (просто пустые и строки состоящие только из пробелов и символов табуляции). Завсегдатаи, поделитесь пожалуйста. Может, еще кому пригодится. Если никто не поделится, то придется самому написать и поделиться с сообществом.
Эта пойдет?: TabEdit
__________________
Настройся на хороший день и он таким будет!
Vovka вне форума   Ответить с цитированием
Старый 25.11.2016, 10:05   #24
Pridnya
Senior Member
 
Регистрация: 21.01.2009
Адрес: Orel
Возраст: 38
Сообщений: 4,287
Вес репутации: 4216/115
Pridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond repute
По умолчанию Re: Просмотр сишного кода после обработки директив условной компиляции

Цитата:
Сообщение от Vovka Посмотреть сообщение
Эта пойдет?: TabEdit
Эта программа с графическим интерфейсом, которая открывает один файл через меню, затем вываливает окно настроек, его нужно настраивать. Вручную по одному файлу не интересно (файлов несколько десятков и часть из них меняются в зависимости от настроек), нужно автоматизировать процесс.

PS: Пакетная обработка файлов предполагает их предварительный поштучный ввод в список настроек. А она умеет запускаться из командной строки с параметрами? Вроде как с определенными настройками форматирование сохраняется, и есть режим пакетной обработки, но нужно выполнить это одной командой.

Нужна программа, которая работает из командной строки, чтобы её можно было (команду: удалить пустые строки во всех *.i файлах каталога с заданным именем) прописать в настройках IDE в окошке (см.скриншот Команда пользователя.PNG) и после сборки проекта IDE запустит эту команду, в результате работы программы все файлы листинга в каталоге c заданным именем будут очищены от пустых строк и строк из пробелов и символов табуляции.
Миниатюры
TabEdit.PNG   Форматирование сохраняется.PNG  
__________________
Прогресс неизбежен.

Последний раз редактировалось Pridnya; 25.11.2016 в 10:25.
Pridnya вне форума   Ответить с цитированием
Старый 25.11.2016, 10:40   #25
Pridnya
Senior Member
 
Регистрация: 21.01.2009
Адрес: Orel
Возраст: 38
Сообщений: 4,287
Вес репутации: 4216/115
Pridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond repute
По умолчанию Re: Просмотр сишного кода после обработки директив условной компиляции

Vovka, для одного файла делает то, что нужно, в соответствии с окном настроек. Но для пакетной обработки (нужно сделать то же самое, что для одного с этими же настройками) вываливается свое окно настроек - другое. Пишет, что обработано 35 файлов, но удаляет только пустые строки, а строки из пробелов и табуляций оставляет.
Должно быть одно окно настроек "что делать" и два режима - для одного файла или для каталога (пакетный режим). Нагородил окон. И вообще бы хорошо было, если бы все это можно было сделать без создания окна (из командной строки, запустив программу с параметрами).
PS: Сравни, как запускается твоя программа из командной строки и как Notepad++, у него тоже есть GUI интерфейс.
Миниатюры
Корректные настройки для одного файла.PNG   Настройки для пакетной обработки.PNG   Запуск из командной строки.PNG   Запуск Notepad++ из командной строки.PNG  
__________________
Прогресс неизбежен.

Последний раз редактировалось Pridnya; 25.11.2016 в 10:53.
Pridnya вне форума   Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы
Опции просмотра

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

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

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Имитатор DS18B20 Filya44 Вопросы начинающих 14 12.03.2012 17:39


Часовой пояс GMT +3, время: 00:24.


Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd. Перевод: zCarot