2012-03-12 137 views
5

我的教授向我們展示了這個代碼:這個包含函數的C函數有什麼問題?

timerX(int x){ 

    int times(int y){ 
      return x * y; 
    } 
    return times; 

} 

如何用C這項工作(使用GCC編譯器)?他說,只要功能消失,內部功能就消失了?我很欣賞任何提示或建議。

+2

見http://en.wikipedia.org/wiki/Trampoline_%28computing%29 – 2012-03-12 19:20:25

+0

感謝巴西萊 - 我學吧! – Coffee 2012-03-12 19:26:10

+2

請發佈有效的驗證碼。努力這樣做可能已經爲您帶來了一些見解。特別是,如果'timerX'確實具有'int(*)(int)'作爲返回值,會非常有趣。 – 2012-03-12 19:27:35

回答

7

它被稱爲nested function, a GNU extension。基本上

  • 內部函數可以接取外部函數的局部變量(其幻影之前聲明的那些)

  • 內部函數只能從外部經由功能poinyers但不叫在包含函數終止後如果內部函數訪問其父項的對象

在您的示例中,從外部調用該函數指針可能是非法的。

如果您在 包含函數退出後嘗試通過其地址調用嵌套函數,則所有地獄都將崩潰。

+0

非常感謝你,我正在研究你給的鏈接! – Coffee 2012-03-12 21:21:37

3

我很確定它和其他函數一樣工作,只是它只對封閉函數可見。

換句話說,它只是涉及到的能見度或功能的可訪問性,而不是其他。