2016-08-23 6 views
1

Я бегу indent с аргументами -npro -kr -i8 -ts8 -sob -l80 -ss -ncs -cp1, все хорошо, за исключением двух препятствий:отступа быть нечетным - исправить или выбрать альтернативный

1) стремится поставить дополнительное пространство после * в отчетности как mytype_t * my;, т.е.

void my_function(my_type *ptr) 

превращается в

void my_function(my_type * ptr) 

2) Это помещает дополнительное пространство после & символ в выражениях, как (uint16_t *) & q->drops т.е.

stats->drops = (uint16_t *) &q->drops 

превращается в

stats->drops = (uint16_t *) & q->drops 

Запуск indent с -nss или без -ss не решает проблему.

Есть ли способ рассказать indent не для этого? Если нет, то каковы альтернативы indent?

Спасибо.

РЕШЕНИЕ

% indent -T my_type -T uint16_t 
+0

Я не понимаю, второй случай. Что-то там отсутствует? –

+0

Sidenote: 8 отступов символов не очень хорошая идея. типичные значения - от 2 до 4 пробелов (4 наиболее распространенных). 8 пробелов сделают код менее понятным. – Olaf

+0

'(uint16_t *) & -> drop' не является допустимым синтаксисом. – Olaf

ответ

1

От man indent:

Вы должны использовать опцию '-T' сказать отступ имени всех typenames в вашей программе, которые определяются ЬурейиМ. '-T' может быть указан как , и указаны все указанные имена. Для Например, если ваша программа содержит

typedef unsigned long CODE_ADDR;
typedef enum {red, blue, green} COLOR;

вы бы использовать опции -T CODE_ADDR -T COLOR.

Так что похоже indent не знает о stdint.h типов, так что вы должны позволить ей знать, что вы их используете, передавая -T uint16_t -T mytype_t

+0

спасибо, кажется, решает первую проблему (my_type * ptr), но не вторую (дополнительное пространство после &). – Mark

+1

Похоже, что рассматривает '&' как поразрядный И. Интересно, как мы можем убедить это в том, что это не так ... Вы на самом деле сделали '-T uint16_t', чтобы он знал, что это тип? –

+0

О, это действительно работает, я ошибочно передал «-T uint32_t». Спасибо. – Mark

2

После некоторых поисков, я не мог найти возможность удалить пространство между типом и указателем. То, что было странно, происходит только тогда, когда этот тип заканчивается _t. Таким образом, это, вероятно, не отвечает на ваш вопрос. Однако хорошей альтернативой indent является astyle. Для стиля, который вы ищете, вы можете использовать эти флаги:

astyle --style=kr --indent=tab 

Я действительно надеюсь, что это поможет.