2016-08-23 46 views
1

我带参数运行-npro -kr -i8 -ts8 -sob -l80 -ss -ncs -cp1indent,全部是除了两个障碍好:缩进为奇数 - 修复或选择其他

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有什么替代方案?

谢谢。

SOLUTION

% indent -T my_type -T uint16_t 
+0

我不明白的第二种情况。那里是缺少的东西? –

+0

旁注:8个字符的缩进不是一个好主意。典型值是2到4个空格(最常见的是4个)。 8个空格会使代码实际上不易读。 – Olaf

+0

'(uint16_t *)& - > drops'无论如何都是无效的语法。 – Olaf

回答

1

man indent

必须使用'-T'选项告诉缩进都在你的程序中 typenames由定义的typedef的名称。 '-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 

我真的希望这有助于。