2017-07-18 44 views
0

我看到有人寫代碼以這種方式:嵌套函數及其用處,函數調用一個又一個?

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中增長相同的安裝量?上下文切換?

回答

1

嗯,這是爲了可讀性,可維護性和服從約定,一個函數應該只做一件事,做得很好,還有很多other benefits。想象一下,如果你將所有的代碼組合到一個函數中,你將如何編寫一個callback。如果你對堆棧框架的大小如此擔心,爲什麼不寫下main()函數中的所有東西?

BTW,context switching在這裏並不適用,它是用來定義交換進程/線程關閉處理器的過程。

+0

一些研究產生了這個,[鏈接](https://www.quora.com/Whats-the-most-important-lesson-youve-learned-as-a-software-engineer) – newb7777

+0

@ newb7777第一個答案在你的鏈接中說肯·湯普森不得不說。我認爲這足以讓一般的人類看到的優點:) – babon

1

這些不是"nested functions"。確實,在糟糕的編譯器上會浪費更多的堆棧。然而,將函數放入函數會使代碼a)可重用,b)將相關的事物組合在一起。

優化編譯器將知道內聯的所有這些功能的內容,因此所得到的代碼將或多或少相同,對於兩種情況 - 尤其是如果函數被聲明爲內部聯動(即關鍵字static)。

+0

像PIC10F硅,其中內存不豐富,最小的代碼大小將是首選?在PIC32上,它可能更易於使用良好的編碼風格編寫。 – newb7777