我见过人们以这种方式编写代码:
void function2()
{.....
..more blah blah...
.<I think i will stop nesting my function here>...
..blah blah. over and out....
}
void function1()
{.....
..blah blah...
function2();
....
}
void LCD_disp_main ()
{
<automatic, static... variable declaration>
....
function1(); //calling a function 1
.....
}
而不是编写通常放在函数中的定义,并将其放在此处。
void LCD_disp_main ()
{
<automatic, static... variable declaration>
....
<function1() and function2();> //instead of calling function1 and fucntion2 just inline it here.
.....
}
一方胜过另一方的好处是什么? 不是第一个集合导致堆栈每次调用新函数时都会继续增长,尽管它会在选项2中增长相同的值吗?上下文切换?
答案 0 :(得分:1)
嗯,它的可读性,可维护性和遵守惯例,即函数应该只做一件事并且做得很好而且很多other benefits。想象一下,如果将所有代码整合到一个函数中,您将如何编写callback。如果您对堆栈框架的大小如此担心,为什么不在main()
函数中编写所有内容?
BTW,context switching不适用于此,它用于定义从处理器交换进程/线程的过程。
答案 1 :(得分:1)
这些不是"nested functions"。确实,在糟糕的编译器上会浪费更多的堆栈。但是,放入函数会使代码a)可重用,b)将相关事物组合在一起。
优化编译器会知道内联所有这些函数的内容,因此结果代码在两种情况下都或多或少相同 - 特别是如果函数是用内部链接声明的(即关键字static
)。