Lably
Skip to content

Inline function

  • 14 min read
  • 7 chapters

Related on Lably

Through Compiler, Exception handling and Recursion (computer science)

  1. It serves as a compiler directive that suggests (but does not require) that the compiler substitute the body of the function inline by performing inline expansion, i.e. by inserting the function code at the address of each function call, thereby saving the overhead of a function call. In this respect it is analogous to the register storage class specifier, which similarly provides an optimization hint.
  2. The second purpose of inline is to change linkage behavior; the details of this are complicated. This is necessary due to the C/C++ separate compilation + linkage model, specifically because the definition (body) of the function must be duplicated in all translation units where it is used, to allow inlining during compiling, which, if the function has external linkage, causes a collision during linking (it violates uniqueness of external symbols). C and C++ (and dialects such as GNU C and Visual C++) resolve this in different ways.

Example

An inline function can be written in C or C++ like this:

<span id="mwKA"></span><span class="kr" id="mwKQ">inline</span><span class="w" id="mwKg"> </span><span class="kt" id="mwKw">void</span><span class="w" id="mwLA"> </span><span class="nf" id="mwLQ">swap</span><span class="p" id="mwLg">(</span><span class="kt" id="mwLw">int</span><span class="w" id="mwMA"> </span><span class="o" id="mwMQ">*</span><span class="n" id="mwMg">m</span><span class="p" id="mwMw">,</span><span class="w" id="mwNA"> </span><span class="kt" id="mwNQ">int</span><span class="w" id="mwNg"> </span><span class="o" id="mwNw">*</span><span class="n" id="mwOA">n</span><span class="p" id="mwOQ">)</span> <span class="p" id="mwOg">{</span> <span class="w" id="mwOw"> </span><span class="kt" id="mwPA">int</span><span class="w" id="mwPQ"> </span><span class="n" id="mwPg">tmp</span><span class="w" id="mwPw"> </span><span class="o" id="mwQA">=</span><span class="w" id="mwQQ"> </span><span class="o" id="mwQg">*</span><span class="n" id="mwQw">m</span><span class="p" id="mwRA">;</span> <span class="w" id="mwRQ"> </span><span class="o" id="mwRg">*</span><span class="n" id="mwRw">m</span><span class="w" id="mwSA"> </span><span class="o" id="mwSQ">=</span><span class="w" id="mwSg"> </span><span class="o" id="mwSw">*</span><span class="n" id="mwTA">n</span><span class="p" id="mwTQ">;</span> <span class="w" id="mwTg"> </span><span class="o" id="mwTw">*</span><span class="n" id="mwUA">n</span><span class="w" id="mwUQ"> </span><span class="o" id="mwUg">=</span><span class="w" id="mwUw"> </span><span class="n" id="mwVA">tmp</span><span class="p" id="mwVQ">;</span> <span class="p" id="mwVg">}</span>

Then, a statement such as the following:

<span id="mwWg"></span><span class="n" id="mwWw">swap</span><span class="p" id="mwXA">(</span><span class="o" id="mwXQ">&</span><span class="n" id="mwXg">x</span><span class="p" id="mwXw">,</span><span class="w" id="mwYA"> </span><span class="o" id="mwYQ">&</span><span class="n" id="mwYg">y</span><span class="p" id="mwYw">);</span>

may be translated into (if the compiler decides to do the inlining, which typically requires optimization to be enabled):

<span id="mwZw"></span><span class="kt" id="mwaA">int</span><span class="w" id="mwaQ"> </span><span class="n" id="mwag">tmp</span><span class="w" id="mwaw"> </span><span class="o" id="mwbA">=</span><span class="w" id="mwbQ"> </span><span class="n" id="mwbg">x</span><span class="p" id="mwbw">;</span> <span class="n" id="mwcA">x</span><span class="w" id="mwcQ"> </span><span class="o" id="mwcg">=</span><span class="w" id="mwcw"> </span><span class="n" id="mwdA">y</span><span class="p" id="mwdQ">;</span> <span class="n" id="mwdg">y</span><span class="w" id="mwdw"> </span><span class="o" id="mweA">=</span><span class="w" id="mweQ"> </span><span class="n" id="mweg">tmp</span><span class="p" id="mwew">;</span>

When implementing a sorting algorithm doing lots of swaps, this can increase the execution speed.

Sign in to keep reading

6 more chapters are free with a Lably account.

More in Computing and communication