【问题标题】:indent being odd -- fix or choose an alternative缩进奇怪 - 修复或选择替代
【发布时间】:2016-08-23 17:52:10
【问题描述】:

我正在运行 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

【问题讨论】:

  • 我不明白第二种情况。是不是少了什么东西?
  • 旁注:8 个字符的缩进不是一个好主意。典型值为 2 到 4 个空格(4 个最常见)。 8 个空格会降低代码的可读性。
  • (uint16_t *) &->drops 无论如何都不是有效的语法。
  • 你能用indent之前和之后的这些语句展示一个有效C源代码的例子(简短的)吗?
  • @Eugene Sh.,我更新了原帖。

标签: c coding-style indentation gnu-indent


【解决方案1】:

经过一番搜索,我找不到删除类型和指针之间空格的选项。奇怪的是它只发生在该类型以_t 结尾时。因此,这可能无法回答您的问题。然而,indent 的一个很好的替代品是astyle。对于您正在寻找的样式,您可以使用这些标志:

astyle --style=kr --indent=tab

我真的希望这会有所帮助。

【讨论】:

    【解决方案2】:

    来自man indent

    您必须使用 '-T' 选项告诉 indent 所有 程序中由 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 让它知道你正在使用它们

    【讨论】:

    • 谢谢,似乎解决了第一个问题(my_type * ptr),但没有解决第二个问题(&后面的多余空格)。
    • 看起来它正在考虑将& 视为按位与。我想知道我们如何才能说服它不是......你真的做了-T uint16_t 让它知道它是一个类型转换吗?
    • 哦,它确实有效,我错误地传递了“-T uint32_t”。谢谢。
    • 好。那么这不是一个错误。
    猜你喜欢
    • 1970-01-01
    • 2013-05-14
    • 2016-12-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-03
    • 1970-01-01
    • 2016-08-15
    • 1970-01-01
    相关资源
    最近更新 更多