代码之家  ›  专栏  ›  技术社区  ›  sharptooth

将函数体写在单独的行上有什么负面结果吗?

  •  0
  • sharptooth  · 技术社区  · 14 年前

    inline int max( int a, int b ) { return a > b ? a : b; }
    

    问题是在visualstudio调试器中调试代码时,不可能立即看到什么 a b 在使用F11进入功能时(“步进”)。只需按F11键,“当前行”指针指向带有大括号的行,然后在F10(“跳过”)之后,控件将退出函数。那不太方便。

    另一种方法是重写所有这些函数,以便车身有效载荷占据单独的一行:

    inline int max( int a, int b )
    {
        return a > b ? a : b;
    }
    

    现在,当按下F11时,“当前行”指针指向左大括号,然后在F10控制传递到有效负载后,可以看到什么值 有。如果一个人不在乎,只是在计算某个复杂表达式时输入了这个函数,他就可以按Shift-F11键退出这个函数,但是在前一种情况下他也可以这样做,所以调试经验没有什么大的负面变化。

    6 回复  |  直到 14 年前
        1
  •  2
  •   itsme    14 年前

    我能想到的唯一原因是,这是一个非常简单的方法,如果不在一行中编写方法,文件会更大。用第二种方式格式化没有什么负面的。它只是正面的:)

        2
  •  3
  •   ChrisF toni    14 年前

    两种格式化代码的方法在编译后的代码中没有区别。

    在本例中,它将代码放在单独的行上。

        3
  •  2
  •   arscariosus    14 年前

    根据我所知道的,C/C++编译器忽略了空白,所以在另一行上编写函数体只是为了更好的代码可读性。

        4
  •  2
  •   sbi    14 年前

    无论你改变了多少函数体,你都会不断地碰到这个问题(从而使每个试图在SVN或你使用的任何东西中查看它们的变化的人都感到困惑)。它只是太常见的一个编码约定,完全消除它从一个足够大的代码基。
    即使你设法修复了所有这些函数定义(从我的观点来看,这是代码的丑化),你仍然会遇到类似 f(g()+h(), i()) 要调试到调用的位置 f() 不必经过 g() , h() ,和 i() . 本质上,这是同一个问题:一些代码放在一行中,而您只想调试其中的一部分。你打算改变吗( 丑陋的 )所有这些代码也是?

    中高音 +

        5
  •  0
  •   user434817 user434817    14 年前

    是否通过单击代码窗口的左侧来设置断点?尝试将光标放在return语句上,然后按相应的键盘快捷键,例如F9。只应选择一条语句作为断点,就像在第二个示例中选择整行一样。

        6
  •  0
  •   knatten Ciro Santilli OurBigBook.com    14 年前

    我无法重现你的问题。在visualstudio2008中,如果我使用F11单步执行此函数,则当前的行指针指向一行,并且可以看到a和b的值。

    至于你的问题,这纯粹是主观的。就我个人而言,我更喜欢一行而不是一行。但那只是我,我喜欢在屏幕上有尽可能多的代码在任何时候。