Keil Logo

Extern inline functions in ARM C++

10.12 Extern inline functions in ARM C++

The ISO C++ Standard requires inline functions to be defined wherever you use them. To prevent the clashing of multiple out-of-line copies of inline functions, the C++ compiler emits out-of-line extern functions in common sections.

Out-of-line inline functions

The compiler emits inline functions out-of-line, in the following cases:
  • The address of the function is taken, for example:
    inline int g()
        return 1;
    int (*fp)() = &g;
  • The function cannot be inlined, for example, a recursive function:
    inline unsigned int fact(unsigned int n) {
        return n < 2 ? 1 : n * fact(n - 1);
  • The heuristic that is used by the compiler decides that it is better not to inline the function. -Ospace and -Otime influence the heuristic. If you use -Otime, the compiler inlines more functions. You can override this heuristic by declaring a function with __forceinline. For example:
    __forceinline int g()
        return 1;


__forceinline does not guarantee the function is inlined, since the decision ultimately lies with the compiler. Using __forceinline provides a hint, telling the compiler to inline the function if possible.
Non-ConfidentialPDF file icon PDF versionARM DUI0375H
Copyright © 2007, 2008, 2011, 2012, 2014-2016 ARM. All rights reserved. 
  Arm logo
Important information

This site uses cookies to store information on your computer. By continuing to use our site, you consent to our cookies.

Change Settings

Privacy Policy Update

Arm’s Privacy Policy has been updated. By continuing to use our site, you consent to Arm’s Privacy Policy. Please review our Privacy Policy to learn more about our collection, use and transfers
of your data.