2013-04-09 17 views
6

Mam wątpliwości dotyczące funkcji wbudowanych. Funkcje inline nie będą wiązały się z żadnymi wywołaniami funkcji, ale po prostu zastąpią definicję funkcji w dowolnym miejscu, w którym wykonywane jest wywołanie funkcji inline. Funkcje inline mają wymuszenie typu w przeciwieństwie do makr. Co się stanie, jeśli funkcje rekurencyjne zostaną wprowadzone w linii?Co się stanie, jeśli funkcje rekursywne będą wstawiane jako wbudowane?

+3

Prawdopodobny duplikat http://stackoverflow.com/questions/190232/can-a-recursive-function-be-inline – SecurityMatt

+1

@SecurityMatt może być następnym razem będę bardziej ostrożny. Dziękuję Ci. –

+1

odpowiedź nieparzysta, ale: wiele kompilatorów może również wstawiać rozwinąć niektóre funkcje rekursywne; Implementacja Microsoft nie będzie wstawiać funkcji rekursywnych, chyba że mają linię #pragma inline depth (n), która określa maksymalną głębokość wnikania, jaką funkcja będzie miała. –

Odpowiedz

4

"inline" nie jest gwarancją, to prośba.

Funkcja rekursywna inline nie będzie (zazwyczaj) inline.

  • Ponieważ niektóre komentujÄ podkreślić, że szczególnych przypadkach (na przykład przy użyciu kompilatora pragma specyficzną), w którym inline jest możliwe.
+1

Tylko dlatego, że jest rekursywna, nie znaczy, że Twój kompilator nie będzie wbudowany: http://msdn.microsoft.com/en-us/library/69hzy453(v=vs.80).aspx – SecurityMatt

+0

poprawić odpowiedź, z linkiem podanym przez @SecurityMatt, tak większość kompilatorów nie wstawia funkcji rekursywnych, ale niektórzy robią .... przeczytaj też mój komentarz do pytania. –

5

inline jest jedynie sugestią dla kompilatora i nie gwarantuje, że funkcja będzie inline.

Oczywiście kompilator nie będzie w stanie wstawiać funkcji rekursywnej w nieskończoność. Może wcale nie wprowadzać go do linii lub może wprowadzać go na głębokość zaledwie kilku poziomów.

+1

[Tak mało możliwy poziom w kompilatorze firmy 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) Po prostu lubisz udostępniać link –

Powiązane problemy