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

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

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

Ответ
 
Опции темы Опции просмотра
Старый 23.11.2016, 10:20   #1
Pridnya
Senior Member
 
Регистрация: 21.01.2009
Адрес: Orel
Возраст: 37
Сообщений: 4,007
Вес репутации: 3958/109
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
Возраст: 37
Сообщений: 4,007
Вес репутации: 3958/109
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,211
Вес репутации: 1893/63
Рак has a brilliant futureРак has a brilliant futureРак has a brilliant futureРак has a brilliant futureРак has a brilliant futureРак has a brilliant futureРак has a brilliant futureРак has a brilliant futureРак has a brilliant futureРак has a brilliant futureРак has a brilliant future
По умолчанию 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
Возраст: 37
Сообщений: 4,007
Вес репутации: 3958/109
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,162
Вес репутации: 3463/102
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
Сообщений: 82
Вес репутации: 761/16
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
Возраст: 37
Сообщений: 4,007
Вес репутации: 3958/109
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,162
Вес репутации: 3463/102
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,048
Вес репутации: 3282/68
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
Возраст: 37
Сообщений: 4,007
Вес репутации: 3958/109
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,162
Вес репутации: 3463/102
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
Возраст: 43
Сообщений: 1,190
Вес репутации: 1464/58
DimaS has much to be proud ofDimaS has much to be proud ofDimaS has much to be proud ofDimaS has much to be proud ofDimaS has much to be proud ofDimaS has much to be proud ofDimaS has much to be proud ofDimaS has much to be proud ofDimaS has much to be proud ofDimaS has much to be proud of
По умолчанию Re: Просмотр сишного кода после обработки директив условной компиляции

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

Вопрос: есть ли какие-то средства, чтобы просмотреть исходный код после обработки директив препроцессора, т.е. остановить сборку и посмотреть, что включилось в сишный код перед компиляцией?
Эклипс умеет, хотя иногда и лажается на #ifdef-ах.
DimaS вне форума   Ответить с цитированием
Старый 24.11.2016, 09:49   #13
Pridnya
Senior Member
 
Регистрация: 21.01.2009
Адрес: Orel
Возраст: 37
Сообщений: 4,007
Вес репутации: 3958/109
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
Возраст: 37
Сообщений: 4,007
Вес репутации: 3958/109
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
Возраст: 37
Сообщений: 4,007
Вес репутации: 3958/109
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,162
Вес репутации: 3463/102
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
Возраст: 37
Сообщений: 4,007
Вес репутации: 3958/109
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,162
Вес репутации: 3463/102
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,162
Вес репутации: 3463/102
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
Возраст: 37
Сообщений: 4,007
Вес репутации: 3958/109
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
Сообщений: 82
Вес репутации: 761/16
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
Возраст: 37
Сообщений: 4,007
Вес репутации: 3958/109
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,700
Вес репутации: 2458/75
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
Возраст: 37
Сообщений: 4,007
Вес репутации: 3958/109
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
Возраст: 37
Сообщений: 4,007
Вес репутации: 3958/109
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, время: 23:07.


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