嵌套函数及其实用性,一个接一个调用的函数?

时间:2017-07-18 06:16:38

标签: c function nested

我见过人们以这种方式编写代码:

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中增长相同的值吗?上下文切换?

2 个答案:

答案 0 :(得分:1)

嗯,它的可读性,可维护性和遵守惯例,即函数应该只做一件事并且做得很好而且很多other benefits。想象一下,如果将所有代码整合到一个函数中,您将如何编写callback。如果您对堆栈框架的大小如此担心,为什么不在main()函数中编写所有内容?

BTW,context switching不适用于此,它用于定义从处理器交换进程/线程的过程。

答案 1 :(得分:1)

这些不是"nested functions"。确实,在糟糕的编译器上会浪费更多的堆栈。但是,放入函数会使代码a)可重用,b)将相关事物组合在一起。

优化编译器会知道内联所有这些函数的内容,因此结果代码在两种情况下都或多或少相同 - 特别是如果函数是用内部链接声明的(即关键字static)。