Eclipse 中 if 条件的换行缩进格式 CDT

Formatting of new line indentation of if conditions in Eclipse CDT

在 Eclipse (4.4) CDT (8.5) on windows (7) ifelse if 条件下的新行缩进没有意义我。这个集合在 eclipse 的什么地方?

我尝试在 Window > 首选项 > C/C++ > 代码样式 > 格式化程序中查找,但没有看到任何相关设置。

我在键入条件或 select 行时按下 return 键并按 Ctrl+I ("Fix Indentation") 的示例。请注意,尽管嵌套级别不同,但前四行都具有相同的缩进。接下来的第五行比前一行缩进了 两个 层,第七行也是如此,两者都与嵌套层级没有明显关系。

else if (((wp == SMB_Protocol_Write_Byte) && (qcn >= 1)
        && (rp != SMB_Protocol_Process_Call) 
        && (rp != SMB_Protocol_Block_WR)) 
        || ((wp == SMB_Protocol_Write_Word) && (qcn >=2) 
                && (rp != SMB_Protocol_Block_WR)) 
                || ((wp == SMB_Protocol_Block_Write) 
                        && (qcn >= (CMD_Number_Bytes_max + 1)))) {
    e = EXIT_FAILURE;
}

我更喜欢以下内容:

else if (((wp == SMB_Protocol_Write_Byte) && (qcn >= 1)
                && (rp != SMB_Protocol_Process_Call) 
                && (rp != SMB_Protocol_Block_WR)) 
            || ((wp == SMB_Protocol_Write_Word) && (qcn >=2) 
                && (rp != SMB_Protocol_Block_WR)) 
            || ((wp == SMB_Protocol_Block_Write) 
                && (qcn >= (CMD_Number_Bytes_max + 1)))) {
    e = EXIT_FAILURE;
}

是否可以更改此设置? 此外,如果有人可以对当前的 indentation/nesting 格式进行评论,我们将不胜感激!

编辑: 意识到这可能类似于 Eclipse JDT Code Formatter: Indent parameter in IF-Statement

Is it possible to change this?

是的。使用默认的缩进策略(K&R 内置),我得到的结果与你使用 Ctrl+I 的结果相同,但如果我这样做 Ctrl+Shift+F(格式代码)我得到以下内容。

} else if (((wp == SMB_Protocol_Write_Byte) && (qcn >= 1)
        && (rp != SMB_Protocol_Process_Call)
        && (rp != SMB_Protocol_Block_WR))
        || ((wp == SMB_Protocol_Write_Word) && (qcn >= 2)
                && (rp != SMB_Protocol_Block_WR))
        || ((wp == SMB_Protocol_Block_Write)
                && (qcn >= (CMD_Number_Bytes_max + 1)))) {

如果您想要列对齐,而不是在连续行上简单缩进,请创建您自己的格式配置文件并更改以下内容:

  • 缩进 制表符 -> 制表符策略 仅限空格 混合
    • 默认情况下 仅制表符 缩进将到下一个制表位
  • 换行 选项卡 -> 表达式/二进制表达式 设置缩进策略 列缩进

这是格式化时的结果(而不是简单地更正缩进时):

} else if (((wp == SMB_Protocol_Write_Byte) && (qcn >= 1)
            && (rp != SMB_Protocol_Process_Call)
            && (rp != SMB_Protocol_Block_WR))
           || ((wp == SMB_Protocol_Write_Word) && (qcn >= 2)
               && (rp != SMB_Protocol_Block_WR))
           || ((wp == SMB_Protocol_Block_Write) && (qcn
                   >= (CMD_Number_Bytes_max + 1)))) {

以下是显示设置的屏幕截图: