Ho un dubbio sulle funzioni inline. Le funzioni in linea non implicano alcuna chiamata di funzione, ma solo la sostituzione della definizione della funzione ovunque venga effettuata la chiamata alla funzione inline. Le funzioni in linea hanno l'imposizione del tipo a differenza delle macro. Cosa succederà se le funzioni ricorsive sono rese in linea?Cosa succede se eseguiamo funzioni ricorsive come inline?
risposta
"inline" non è una garanzia, è una richiesta.
La funzione in linea ricorsiva non sarà (di norma) in linea.
- Come alcuni commentatori sottolineano, ci sono casi particolari (ad esempio utilizzando pragma specifiche del compilatore) in cui incorporamento è possibile.
Solo perché è ricorsivo, non significa che il compilatore non lo indicherà: http://msdn.microsoft.com/en-us/library/69hzy453(v=vs.80).aspx – SecurityMatt
migliorare la risposta, con link dato da @SecurityMatt, sì la maggior parte dei compilatori non ha funzioni ricorsive in linea, ma alcuni fanno .... leggi anche il mio commento alla domanda. –
inline
è semplicemente un suggerimento per il compilatore e non garantisce che una funzione sia in linea.
Ovviamente, il compilatore non sarà in grado di allineare una funzione ricorsiva all'infinito. Potrebbe non essere in linea o non essere in linea con alcuni livelli.
[Sì pochi livelli possibili nel compilatore Microsoft] (http://wiki.answers.com/Q/What_is_inline_function_in_C_Can_you_make_inline_function_recursive_or_not_If_make_can_complier_will_compile_that_code) Mi è piaciuto condividere il link con te –
Possibile duplicato di http://stackoverflow.com/questions/190232/can-a-recursive-function-be-inline – SecurityMatt
@SecurityMatt potrebbe essere la prossima volta che sarò più attento. Grazie. –
risposta dispari ma: Molti compilatori possono anche espandere alcune funzioni ricorsive in linea; L'implementazione Microsoft non eseguirà funzioni ricorsive in linea a meno che non dispongano di una riga in profondità (n) di #pragma che specifica la profondità massima di ricusazione della funzione. –