开源改变世界

planner.cpp 缺少括号? #261

推推 grbl 2年前 (2023-02-05) 202次浏览
关闭
没有人 打开这个问题 2012 年 10 月 10 日 · 7条评论
关闭

planner.cpp 缺少括号?#261

没有人 打开这个问题 2012 年 10 月 10 日 · 7条评论

评论

planner.cpp 缺少括号? #261
贡献者

你好,

它从Bernhard 于 2011-12-09提交的2bc5e7e开始。

#ifdef PREVENT_DANGEROUS_EXTRUDE
  if(target[E_AXIS]!=position[E_AXIS])
    if(degHotend(active_extruder)<EXTRUDE_MINTEMP && !allow_cold_extrude)
    {
      position[E_AXIS]=target[E_AXIS]; //behave as if the move really took place, but ignore E part
      SERIAL_ECHO_START;
      SERIAL_ECHOLNPGM(MSG_ERR_COLD_EXTRUDE_STOP);
    }
#ifdef PREVENT_LENGTHY_EXTRUDE
  if(labs(target[E_AXIS]-position[E_AXIS])>axis_steps_per_unit[E_AXIS]*EXTRUDE_MAXLENGTH)
  {
    position[E_AXIS]=target[E_AXIS]; //behave as if the move really took place, but ignore E part
    SERIAL_ECHO_START;
    SERIAL_ECHOLNPGM(MSG_ERR_LONG_EXTRUDE_STOP);
  }
#endif
#endif

endif 位置错误,只有在启用第一个选项时才会启用第二个选项。
然后:

  if(target[E_AXIS]!=position[E_AXIS])

缺少大括号,天知道作者的意思。这是不正确的还是缩进不正确?

Marlin 中的编码风格是不存在的:-(

planner.cpp 缺少括号? #261
贡献者

看起来 #endif 在错误的位置。

我没有看到支架问题。前两个 ifs 实际上意味着:

if(target[E_AXIS]!=position[E_AXIS]) && (degHotend(active_extruder)<EXTRUDE_MINTEMP && !allow_cold_extrude))

不需要第一个 if 应用于 PREVENT_LENGTHY_EXTRUDE 块。鉴于在该块中执行的测试,它是多余的。

Marlin 是开源软件。如果风格不够一致,也许你应该重新格式化并作为项目的补丁提供?

planner.cpp 缺少括号? #261
贡献者作者

是的,马克,我知道它翻译的意思,但是因为没有人喜欢这样做,所以它要么意味着 a) 作者有别的意思而忘记了括号,b) 作者不关心代码的可读性。我希望它是……
Marlin 不是我的项目,所以我不会指定风格。我对任何风格都没有问题,只要它是一致的……
我对此有疑问的原因是因为我想为这个项目做出贡献,但这些文件读起来简直是一场噩梦。
我们以上面的问题为例。

if(something == 1)
   doSomething();

doSomethingElse();

会很好的。
缩进和额外的换行清楚地表明 doSomething() 是 if 的一部分,而 doSomethingElse() 不是。

以上内容应为:

#ifdef PREVENT_DANGEROUS_EXTRUDE
  if(target[E_AXIS]!=position[E_AXIS])
  {
    if(degHotend(active_extruder)<EXTRUDE_MINTEMP && !allow_cold_extrude)
    {
      position[E_AXIS]=target[E_AXIS]; //behave as if the move really took place, but ignore E part
      SERIAL_ECHO_START;
      SERIAL_ECHOLNPGM(MSG_ERR_COLD_EXTRUDE_STOP);
    }
  }
#endif

#ifdef PREVENT_LENGTHY_EXTRUDE
  if(labs(target[E_AXIS]-position[E_AXIS])>axis_steps_per_unit[E_AXIS]*EXTRUDE_MAXLENGTH)
  {
    position[E_AXIS]=target[E_AXIS]; //behave as if the move really took place, but ignore E part
    SERIAL_ECHO_START;
    SERIAL_ECHOLNPGM(MSG_ERR_LONG_EXTRUDE_STOP);
  }
#endif

或者

#ifdef PREVENT_DANGEROUS_EXTRUDE
  if((target[E_AXIS] != position[E_AXIS]) && (degHotend(active_extruder) < EXTRUDE_MINTEMP) && !allow_cold_extrude)
  {
    position[E_AXIS]=target[E_AXIS]; //behave as if the move really took place, but ignore E part
    SERIAL_ECHO_START;
    SERIAL_ECHOLNPGM(MSG_ERR_COLD_EXTRUDE_STOP);
  }
#endif

#ifdef PREVENT_LENGTHY_EXTRUDE
  if(labs(target[E_AXIS]-position[E_AXIS])>axis_steps_per_unit[E_AXIS]*EXTRUDE_MAXLENGTH)
  {
    position[E_AXIS]=target[E_AXIS]; //behave as if the move really took place, but ignore E part
    SERIAL_ECHO_START;
    SERIAL_ECHOLNPGM(MSG_ERR_LONG_EXTRUDE_STOP);
  }
#endif
planner.cpp 缺少括号? #261
贡献者

我知道你觉得这种风格令人困惑,我同意它不是很清楚。

在我的第一篇文章中,我试图提出三点:

  1. 是的,#endif 似乎在错误的位置并且可能是一个错误。
  2. 大括号不会(据我所见)导致错误。他们可能不清楚,但我不对此发表评论。
  3. 如果您希望像这样的开源项目得到改进……改进它。
planner.cpp 缺少括号? #261
贡献者作者

感谢您的输入。我将尝试放置一个描述如何编写代码的文档(甚至应该有一些工作)并且一旦完成就会提出建议。

planner.cpp 缺少括号? #261
贡献者作者

添加到拉取请求e900ece