2010-06-05 177 views
1
  1. 我只是跨ANSI(ISO)就沒有允許的功能嵌套.. 我想知道是什麼讓GNU C ITO實現這個功能(爲什麼這樣有需要時)。如果函數say(a())在另一個函數say(b())中定義,那麼 a()的生命週期將是整個程序?嵌套函數

  2. a()ll的存儲是否將在分配給函數b()的堆棧中創建?

回答

1

1)非常主觀。不是一個線索。 :-)

2)不,內部函數的生存期限制在外部函數的生命週期內。請參閱GCC documentation on nested functions。如果保留一個指向內部函數的指針並在外部函數返回後調用它,那麼可能會發生壞事。

3)內部函數分配自己的堆棧空間,就像任何其他函數一樣。它必須分配自己的空間以支持遞歸調用。

+0

2)不,內部函數的生命期限於外部函數的生命期,yeH但是那麼內部函數的分配與外部函數的堆棧是一樣的,以便當外部函數返回時那麼整個堆棧框架被分配給外部函數被破壞,從而堆疊內部函數。 – Tarun 2010-06-05 12:47:21

+0

@ user359179:呵? – 2010-06-05 12:56:30

+0

hmmmmm什麼是錯的先生? – Tarun 2010-06-05 13:15:50