У каждого программиста есть свой стиль оформления исходников, включающий в себя размеры отступов их наличие или отсутствие в определенных конструкциях, расположение фигурных скобок, наличие/отсутствие пробелов после запятых, возле скобок и т.д. Программа indent преобразовывает файлы между такими стилями, позволяя регулировать огромное количество параметров, включая вышеперечисленные. После составления файла профиля в соответствии со своими предпочтениями, программист может пропустить любой исходный текст через indent и получить его на выходе оформленным так, как он предпочитает (это, например, можно сделать для большей удобочитаемости, ну или чтобы приспособить кусок чужого кода для своей программы icon_wink.gif).
У indent есть множество ключей, контролирующих различные параметры стиля. Все они имеют длинную и короткую форму записи. Большинство параметров имеют значение "да" или "нет", но некоторые (ширина текста или отступ, например) имеют числовое значение. Здесь невозможно описать все параметры, так что читайте man indent или info indent, где для многих параметров даже приведены примеры оформления кода в соответствии с тем или иным значением параметра. Но все же рассмотрим 1 пример. Выражение if {} можно оформить так:
if (a) {
b();
}
можно так:
if (a)
{
b();
}
а можно даже так:
if (a)
{
b();
}
При этом размеры отступов тоже могут быть различными. Так вот, ключ -br (--braces-on-if-line) включает расположение открывающей скобки на одной строке с if (как в 1-м варианте), а -bl (--braces-after-if-line) - на следующей строке. -bli (--brace-indent) определяет отступ между if и фигурными скобками (во 2-м примере используется -bli0, а в 3-м -bli2).
Интересной возможностью indent является выборочное отключение обработки отдельных блоков файла. Для этого надо заключить необрабатываемый блок в комментарии /* *INDENT-OFF* */ и /* *INDENT-ON* */.
Несмотря на то, что indent, как правило, не меняет сам код, меняя лишь оформление, целостность кода все же не гарантируется, так что он может (что, впрочем, маловероятно) и перестать компилироваться. И еще, indent "не знает" C++, так что специфичные для С++ конструкции в лучшем случае останутся такими же, как были в исходном файле (а в худшем испортится их форматирование ).
Конечно, все опции indent можно вводить в командной строке, но лучше после изучения их всех и определения набора подходящих под Ваш любимый стиль записать их (по 1 на строчку) в файл ~/.indent.pro и запускать indent в дальнейшем без опций. Для тех, кому интересно, приведу свой профиль:
--blank-lines-after-declarations
--blank-lines-after-procedures
--braces-after-struct-decl-line
--blank-lines-before-block-comments
--brace-indent0
--braces-after-if-line
--case-brace-indentation0
--cuddle-do-while
--continuation-indentation4
--case-indentation2
--space-after-cast
--indent-level2
--continue-at-parentheses
--no-tabs
--no-space-after-function-call-names
--dont-cuddle-else
--no-space-after-parentheses
--space-after-for
--space-after-if
--space-after-while
--space-special-semicolon
--verbose
--dont-break-procedure-type