在Eclipse CDT中格式化if条件的新行缩进

时间:2016-05-03 12:21:05

标签: eclipse indentation eclipse-cdt code-formatting

在Windows(7)上的Eclipse(4.4)CDT(8.5)中,ifelse if条件下新行的缩进对我来说没有意义。日食在哪里这套呢?

我试过看Window>偏好> C / C ++>代码风格>格式化程序但无法看到任何相关设置。

在我输入条件或选择行并按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;
}

有可能改变这个吗? 此外,如果有人可以对当前缩进/嵌套格式的解释发表评论,我们将不胜感激!

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

1 个答案:

答案 0 :(得分:2)

  

有可能改变这个吗?

是。使用默认缩进策略(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)))) {

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

spaces instead of tabs

indentation policy