Маленькие помощники программиста

Любому программисту, если он писал нечто большее, чем hello world, оказываются полезны не только компилятор (или интерпретатор), но и всякие дополнительные инструменты. О них я сейчас и расскажу.

Великий могучий make

Начну, пожалуй, с самого большого помощника. Это make, и как говорит его название он предназначен для того, чтобы что-то делать. В nix-мире make является основным инструментом для сборки программ, состоящих более чем из одного исходного файла. Любой, кто самостоятельно компилировал программы под Linux, запускал его одноимённой командой. А особенно внимательные замечали в корне исходных кодов программ файлик Makefile (обычно он появляется после выполнения configure или ccmake).

По сути это интерпретатор специального результат-ориентированного языка, а Makefile — это программа для него. Программа состоит из набора правил получения нужного результата. Вот пример такого правила:

%.o:%.c
        gcc -c $< -o $@

В нём описан шаблон результата (%.o — объектный файл), что для него необходимо (%.c — например, исходный текст на языке си), и как этот результат получить (в нашем случае — вызвать GCC с именами этих файлов).

Один из сюрпризов make — строки с командами, которые нужно выполнить, должны начинаться с символа TAB, так что если ваш редактор их автоматом заменяет на пробелы, то придётся сменить редактор.

Генератор документации — Doxygen

Если не всем программистам, то уж точно большинству совершенно лень писать документацию к своим программам. Но тут нашёлся программист, лень которого сподвигла написать программу, которая пишет документацию сама. Так родился Doxygen.

Doxygen сам лазит по исходным кодам, и собирает информацию из них, чтобы впоследствии представить её в удобном для чтения виде. Впрочем чудес не бывает, и сам генератор ни за что не сможет человеческим языком описать смысл функции, зато такие вещи, как прототипы функций, графы наследования, вызовов и прочего наследования он отображает по высшему классу. Но самая важная функция — выдирание из кода аннотаций, оформленных в виде комментариев определённого вида. Так что вам нужно будет лишь писать в комментариях пояснения, а Doxygen их оформит в описание программы сам.

Статический анализатор кода — splint

Многие ошибки можно обнаружить и устранить, не запуская программу. Splint производит глубокий анализ кода, выявляя многие потенциальные проблемы, такие как, утечка памяти, переполнение буферов неправильное приведение типов, обращение по нулевому указателю.

Эта программа предназначена для надёжного программирования, и для того, чтобы пользоваться, стоит не только хорошо знать си, ну и соблюдать определённые правила. Если программа ранее писалась без учёта надёжности, splint выдаёт столько потенциальных проблем, что на их устранение может уйти куда больше, чем уже ушло на написание.

Частичные препроцессоры

Задача не особо частая, но иногда встречается: произвести частичный препроцессинг кода, подставив только некоторые макросы и убрав некоторые условия. С этим могут справиться частичные препроцессоры, такие как

  • cppp
  • scpp
  • unifdef

Универсальный препроцессор m4

Иногда возможностей стандартного препроцессора си недостаточно. В этом случае можно применить дополнительный препроцессор m4. Он имеет собственный макроязык, гораздо более мощный и сложный, чем в си. Впрочем, сами авторы не советуют увлекаться программированием на m4, а то отладка макросов m4 может затянуться дольше, чем собственно программы.

Обфускаторы

cifra/malenkie_pomoschniki_programmista.txt · Последние изменения: 2013/08/14 18:45 — vovanium
За исключением случаев, когда указано иное, содержимое этой вики предоставляется на условиях следующей лицензии: CC Attribution 3.0 Unported