2016-08-03 8 views
0

Я пытаюсь улучшить отступ this C code. Я не придирчив к точным правилам, используемым для отступов, мне просто нужно, чтобы это выглядело как нечто более или менее стандартное!Упражнение с отступом кода C

Интересно, что код выглядит хорошо в моем браузере, но после загрузки понятно, что отступ вызван смесью «вкладок» и «пробелов», и он выглядит уродливым как для SublimeText2, так и для TextWrangler.

Я попытался

indent file.c 

но он возвращает длинный ряд ошибок, которые кажутся связаны с присутствием counterslash с последующим переводом строки («\\ п» или «\\\ п», если слэш должен быть экранированный) в строках. Поэтому я попытался снять их с

tr "\\\n" " " <file.c> newfile.c 

но я не достиг цели.

+0

'Это выглядит уродливым'. Установите этот редактор, чтобы использовать этот размер' 8' для этого файла, и он будет выглядеть лучше. – dxiv

ответ

2

Когда я загружаю файл, он имеет окончания строки CRLF (DOS или Windows). Когда вы запускаете это через Unix indent, он не любит обратную косую черту, за которой следует CR вместо NL (иначе LF). Если вы замените окончание строки CRLF, она должна быть отформатирована на indent.

Проблема в том, что indent ожидает, что обратная косая черта будет сопровождаться новой строкой, но CR не является символом новой строки.

Если у вас есть команда dos2unix или dtou, используйте это. Если нет, то используйте tr:

tr -d '\015' <sfs_code.c> x31; mv x31 sfs_code.c 

Вы также можете улучшить положение вещей, заменив вкладки с 8-ми пробелов. Опять же, могут быть и другие инструменты, которые могут сделать эту работу, но классический инструмент pr:

pr -e8 -l1 -t sfs_code.c > x31; mv x31 sfs_code.c 

обратной косой черты и новой строки последовательности для разделения строк на несколько строк очень кодирование 1980s-стиль. Поскольку в стандарте C89/C90 вводится конкатенация строк, это необязательно (хотя оно по-прежнему считается законным C).

На 6781 линиях, это довольно большой файл. Он включает в себя ряд других исходных файлов (.c) и некоторые заголовки. Я ткнул на него uncrustify, у которого не было проблем с ним; после удаления символов CR, indent был в порядке с ним.

(я использовал свою собственные ule - Uniform Line окончания - программу для выполнения преобразования Это один из многих различных возможных методов.).

Обратите внимание, что ваша команда tr не удалась, поскольку он отображается как обратный слэш и символ новой строки в пустой (и оставил символы CR неизменными), что не то, что вы хотите. Команда tr отображает одиночные символы; это не подходит для сопоставления комбинаций символов по вашему желанию и необходимости.

+0

Теперь это намного лучше! Спасибо +1 –