Ищу C Beautifier, который будет вставлять пробелы между линейными элементами [закрыто]

StackOverflow https://stackoverflow.com/questions/1616116

  •  06-07-2019
  •  | 
  •  

Вопрос

Мне нравятся пробелы между почти всеми семантическими элементами моего кода на C.

Поэтому я предпочитаю

if ( ( foo = bar ( arg1, arg2, arg3 ) ) ==  NULL ) {
    printf ( "Error 42" );
}

к

if((foo=bar(arg1,arg2,arg3))==NULL){
    printf("Error 42");
}

Есть ли средство улучшения C (платформа unix), которое может это сделать?
Требуется очень умный красавиц, потому что он должен оставить функциональные макросы в одиночку.

Это было полезно?

Решение

indent -prs -br -i 4 file

Получается это:

#define f(x) ((x)+(x))

if((foo=bar(arg1,arg2,arg3))==NULL){
    printf("Error 42");
    f(42);
}

В это:

#define f(x) ((x)+(x))

if ( ( foo = bar ( arg1, arg2, arg3 ) ) == NULL ) {
    printf ( "Error 42" );
    f ( 42 );
}

А -prs Опция помещает пробелы вокруг круглых скобок, пробелы вокруг операторов и после запятых входят в стандартную комплектацию.А -br опция усиливает ваш стиль крепления, и -i 4 использует 4 пробела для отступа.Обратите внимание, что определение макроса не изменяется, но вызов функционального макроса в коде (предположительно, то, что вам нужно).

Другие советы

Возможно, вы захотите посмотреть Отступ GNU.Я верю, что он может сделать все, что вы ищете.

Gnu Indent, вероятно, сможет это сделать.К сожалению, у отступа огромное количество опций, многие из которых совсем не интуитивны, а многие из них взаимодействуют крайне странным образом.Мне никогда (ни разу) не удавалось заставить его отформатировать код таким образом, чтобы его выход не был более уродливым, чем вход.В некоторых случаях оно было более однородным.В других, я полагаю, оно действительно должно было быть единообразным, но правила, которым оно следовало, были все еще достаточно странными, поэтому результат часто выглядел просто странно.

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

Я использовал vim с опциями cindent и formatoptions и добился удовлетворительного эффекта.вы можете сделать отступ для всего файла

  gg=G
  gg  -- go to 1st line 
  =G  -- indent upto lastline

Вы хотите написать FormateXPR (VIM7) или вы захотите написать пользовательскую функцию с командами S /// G и составить ее с ключом.

следующее будет ставить пробел после скобок, за исключением строк #define

v/#define/ s/[()]/\1 /g

да, вы будете изучать регулярные выражения :)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top