2017-07-18 8 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. 
    ..... 
    } 

もう1つの利点は何ですか? オプション2で同じマウントを増やしても、新しい関数を呼び出すたびに最初のセットがスタックを成長させませんか?コンテキストの切り替え?

答えて

1

これは、可読性、メンテナンス性、および関数が1つのことだけを実行し、よく行うことと、多くのother benefitsを遵守するという慣習に従います。すべてのコードを1つの関数にまとめる場合は、callbackと書くことを想像してみてください。あなたがスタックフレームのサイズを心配しているのなら、なぜmain()関数のすべてを書きませんか?

ここでは、context switchingは適用されません。プロセス/スレッドをプロセッサからスワップするプロセスを定義するために使用されます。

+0

いくつかの研究がこれをもたらした[リンク](https://www.quora.com/Whats-the-most-important-lesson-you-learned-as-a-software-engineer) – newb7777

+0

@ newb7777最初の答えあなたのリンクには、ケン・トンプソンの言いたいことが書いてあります。私は一般的に人類が利点を見るのに十分だと思います:) – babon

1

これらは"nested functions"ではありません。コンパイラが不十分であればスタックをもっと無駄にすることは事実です。しかし、関数に入れることは、コードを再利用可能にし、b)関連するものをグループ化します。結果として得られるコードは、両方の場合のために、多かれ少なかれ同一であるので

最適化コンパイラは、すべてのこれらの機能の内容をインライン化することを知っているであろう - 機能は内部リンケージ(すなわちキーワードstatic)で宣言された場合は特に。

+0

メモリが豊富でないPIC10fのようなシリコンでは、最小のコードサイズが好まれますか? PIC32では、良いコーディングスタイルで書く方が簡単でしょう。 – newb7777

関連する問題