### Restrictions on Inlining

- You cannot inline functions that use a variable number of arguments.
- You cannot declare a function as inline after it has been called.
- To use _Inline or inline, the code for the function to be inlined must be in the same source file as the call to the function. To inline across source files, you must place the function definition (qualified with _Inline) in a header file that is included by all source files where the function is to be inlined.
- Turn off inlining (/Oi-) if you plan to debug your executable module. Inlining can make debugging difficult; for example, if you set an entry breakpoint for a function call but the function is inlined, the breakpoint will not work.
- You cannot selectively disable inlining for user functions: you can request that a function be inlined, but you cannot turn inlining on and then request that a specific user function not be inlined.
- A function is not inlined during an inline expansion of itself. For a function that is directly recursive, the call to the function from within itself is not inlined. For example, given three functions, A, B, and C, where:
  - A calls B
  - B calls C
  - C calls back to B

  the following inlining takes place:

  - The call to B from A is inlined.
  - The call to C from B is inlined.
  - The call to B from C is not inlined because it is made from within an inline expansion of B itself.

Inlining

Tips for Inlining
Benefits and Drawbacks of Inlining