2012-03-12 9 views
5

mio professore ci ha mostrato questo codice:Qual è il problema con questa funzione C che contiene una funzione?

timerX(int x){ 

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

} 

come funziona in C (usando il compilatore GCC)? Ha detto che non appena la funzione scompare, la funzione interna scompare? Apprezzo qualsiasi consiglio o consiglio.

+2

Vedere http://en.wikipedia.org/wiki/Trampoline_%28computing%29 –

+0

Grazie Basile - Lo sto studiando! – Coffee

+2

si prega di inviare un codice valido. Uno sforzo per farlo potrebbe già averti portato qualche intuizione. In particolare sarebbe stato interessante vedere se 'timerX' ha davvero' int (*) (int) 'come valore di ritorno. –

risposta

7

Si chiama nested function, a GNU extension. Fondamentalmente

  • la funzione interno possono acess le variabili locali della funzione esterna (quelli dichiarati prima della sua apparizione)

  • la funzione interna può essere chiamato solo dall'esterno tramite poinyers funzione, ma non dopo che la funzione di contenimento è terminata se la funzione interna accede agli oggetti dal suo genitore

Nel tuo esempio, probabilmente chiamando quel puntatore funzione dall'esterno essere illegale

Se si tenta di chiamare la funzione annidata attraverso il suo indirizzo dopo la funzione di contenimento è uscito, tutto si scatenerà l'inferno.

+0

Grazie mille, e sto studiando il link che hai dato! – Coffee

3

Sono quasi sicuro che funzioni come qualsiasi altra funzione, tranne che è visibile solo alla funzione di chiusura.

In altre parole, è solo relativo alla visibilità o all'accessibilità della funzione e nient'altro.

Problemi correlati