The C inline keyword indicates the programmer's wish that the function being defined be expanded inside the compound statement it is called from. I. e. there should be no separate implementation of it but rather that it's code should be copied to whatever lines call it. This avoids function call overhead and could mean a great gain of speed inside a repetition block for instance. In many cases the programmer's choice would have been direct coding instead of a function call, had the inline implementation not been at hand.

The great strength of the inline logic is that it overcomes the gap between good programming structure born upon the shoulders of a rich enough set of functions on one hand, and the typical C programmer's demand for optimal speed on the other. What the code looks like at the assembler level is, once debugging is over with, of little or no interest, whereas at the C level, readability and integrity of the code is fundamental.

Whether or not the compiler honours the inline expansion depends upon the individual compiler and what compiler directives are used. Typical compiler options that might lead to the functions declared as inline ending up as separate blocks nevertheless, are those for debugging support and minimum code size.

For extremly simple expressions, an alternative to inline definitions is, at least in a technical sense, the #define preprocessor directive for creating a macro. There is however often a clear logical distinction between those cases in which a macro would be used and those in which an inline function definition is the appropriate choice, even when the expression is a tight one.