Страницы

Поиск по вопросам

вторник, 24 декабря 2019 г.

Как удалить все строковые литералы?

#c #строки #компилятор


Я пишу программу для микроконтроллера, и в нём использую библиотеку для работы с
матрицами Meschach. Библиотека не оптимизирована для работы с микроконтроллерами. В
частности, там есть множество строковых литералов, предназначенных для отправки в стандартный
выводной поток. Он мне не нужен, а литералы занимают слишком много места в исполняемом
файле. Можно ли их убрать? В конфигурационном файле библиотеки я не нашёл макроопределений,
позволяющих отключить стандартный вывод.

Под термином "убрать" я понимаю следующее:


либо убрать все вызовы printf, чтобы литералы стали неиспользуемыми и оптимизатор
их бы выбросил;
либо превратить строки вроде char *a = "aaaa"; в char *a = "";
применить какие-то настройки компилятора, которые могли бы убрать все строки;


Компилятор: IAR Embedded Workbench for ARM 7.50.

Какие есть варианты?
    


Ответы

Ответ 1



sed -e '/printf/ d' ВашаПрограмма.c > Результат.c По комментарию TS: 1) "работает только на Linux" - кто Вам мешает поставить sed под виндой ?! Это же СПО, а не Photoshop за 75 килорублей :-) 2) "удалять также и строковые литералы, а также одновременно работать с множеством файлов." - вот крохотный скрипт для bash: #! /bin/bash # # Скрипт просматривает вс файлы *.c в текущем каталоге и # выполняет следующие действия: # 1. Удаляет все строки, содержащие 'printf' # 2. "Схлопывает все текстовые литералы: "abcd" -> "" # # Что именно делается, задано в файле команд команд sed, # который называется process.txt # # Результат обработки записывается в файл с дополнительным суффиксом new. for prog_file in *.c do echo Обрабатывается файл $prog_file sed -f process.txt $prog_file > $prog_file.new done Файл команд process.txt для sed выглядит таким образом: /printf/ d s/".\+"/""/ Первая команда удаляет строки, содержащие 'printf', а вторая - "схлапывает" текстовые литералы. Со второй командой есть некоторая проблема... Если текстовый литерал: Занимает несколько строк На одной строке расположено несколько литералов Содержит символы \" то всё это работать не будет. Ну я уже не стал так заморачиваться - в рамках регулярных выражений эти задачи решить невозможно.

Комментариев нет:

Отправить комментарий