Quantcast
Channel: Linux.org.ru: Форум (тех. форум)
Viewing all articles
Browse latest Browse all 73844

Как компилятор определяет что можно заинлайнить?

$
0
0
int funca(int * a)
{
  *a += 1;
}

int main(void)
{
   int b = 5;
   funca(&b);
   funca(&b);
   return b;
}

Вот положим компилятор взял и заинлайнил funca.
А мы, положим, определим функцию в другом юните. Или даже так:

//file1.c

int funca(int * a)
{
  *a += 1;
}

int funcb(int * a)
{
  funca(a);
  funca(a);
}
Может компилятор заинлайнить funca в funcb? По идее может, потому что на явное объявление он кладет и сам расставляет inlinе так где ему удобно.

А теперь вопрос:

gcc file1.c -o file1.o
Все, на этом этапе уже он не сможет ее «разынлайнить» обратно.
А я возьму и залинкую эту штуку как библиотеку. И попытаюсь дернуть funca. А нету там больше funca!

 


Viewing all articles
Browse latest Browse all 73844

Trending Articles