do wielu szybkich zadań, w których można zastosować funkcję f(x,y)
, w zwykłym C używane są makra. Chciałbym zapytać konkretnie o te przypadki, które można rozwiązać za pomocą wywołania funkcji (tj. Makra używane do wstawiania funkcji, a nie do rozszerzania kodu dowolnego kodu).
Zazwyczaj funkcje C nie są wstawiane, ponieważ mogą być połączone z innymi plikami C. Jednak statyczne funkcje C są widoczne tylko z pliku C, w którym są zdefiniowane. Dlatego mogą być wstawiane przez kompilatory. Słyszałem, że wiele makr należy zastąpić, zamieniając je w funkcje statyczne, ponieważ zapewnia to bezpieczniejszy kod.
Czy istnieją przypadki, w których nie jest to dobry pomysł?
Znowu: Nie pytam o makra do produkcji kodu z podobnymi konstrukcjami ##, których w ogóle nie można wyrazić jako funkcję.
inline
funkcje ing zapewniają, że można go zdefiniować wiele razy w pliku binarnym, kompilator może zdecydować, czy faktycznie wstawi to, by zaoszczędzić miejsceinline
, nie chodzi o C ++.inline
w C, przynajmniej od C99. Szybki przegląd znajduje się w Wikipedii na temat funkcji wbudowanych .Odpowiedzi:
Makra, które można rozwiązać za pomocą wywołania funkcji, mają wiele pułapek:
++i
.Makra, które można rozwiązać za pomocą wywołania funkcji, mogą być przydatne do zapewnienia wstawiania w prymitywnym kompilatorze. Nie znam żadnego kompilatora, który nie obsługuje funkcji wbudowanych, a niektóre z nich mogą nawet wbudować się we wszystkie jednostki kompilacyjne.
Nie ma powodu, dla którego kompilator nie byłby w stanie dostarczyć dwóch wersji funkcji, tradycyjnej edycji
call
iinline
jednej. Powinieneś spojrzeć na dokumentację kompilatora, na który celujesz. Możesz także spojrzeć na wygenerowany zestaw: nawet jeśli nie znasz zestawu, możesz szybko nauczyć się mówić, czy jakaś funkcja została wstawiona, czy nie. (Zacznij od przykładów dla dzieci, aby szybko się tego nauczyć.)źródło