а возможно ли использовать одну и туже функцию в разных участках когда как inline а в других обычным вызовом?
может есть какоя то директива препроцессору?
>а возможно ли использовать одну и туже функцию в разных участках когда
>как inline а в других обычным вызовом?
>может есть какоя то директива препроцессору?Собственно само ключевое слово inline не обязывает компилятор внедрять код функции в каждую точку вызова - например, при сборке без оптимизации большинство компиляторов и вовсе это никогда не делают. Даже при использовании агрессивных режимов оптимизатора большие inline-функции могут быть обработаны как статические (или, более строго, как weak-символы).
Специальные директивы для жесткого управления этими вещами мне неизвестны. Если они и существуют в каких-то компиляторах, то являются нестандартными.
ну я тоже не нашел
но надеялся....
Если компилятор в конкретном месте кода о*ет от сложности кода то может не делать инлиновую подстановку. Вообще есть решение(для GCC, но для извращенцев):
inline void func()
{
//any code
}int main()
{
func();//инлайновая подстановка(при оптимизации)
asm("call _func\n"); //для тех самых
}Увидев таку ботву любой, уважающий себя компилятор, шлепнет в объектный файл и static-вариант.
Чтоб не шлепать на асме, вот для гурманов исходного кода:
#define STATIC_CALL(FUNCTION) \
asm("call _" #FUNCTION "\n");Идею подал, для ф-й с параметрами т*сь сами. Если надо подскажу.
>
>inline void func()
>{
> //any code
>}
>
>int main()
>{
> func();//инлайновая подстановка(при оптимизации)
>}
>Проблема в том, что тут инлайна может и не случиться.
Заставить компилятор инлайнить функцию подчас сложнее
чем попросить не инлайнить.
>Проблема в том, что тут инлайна может и не случиться.
>Заставить компилятор инлайнить функцию подчас сложнее
>чем попросить не инлайнить.Всё верно, за исключением того, что здесь нет совершенно никакой проблемы :)