An inline function is one for which the compiler copies the code from the function definition directly into the code of the calling function rather than creating a separate set of instructions in memory. Instead of transferring control to and from the function code segment, a modified copy of the function body may be substituted directly for the function call. In this way, the performance overhead of a function call is avoided. Using the inline specifier is only a suggestion to the compiler that an inline expansion can be performed; the compiler is free to ignore the suggestion.
Any function, with the exception of main,
can be declared or defined as inline with the inline function
specifier. Static local variables are not allowed to be defined within
the body of an inline function.
C++ functions
implemented inside of a class declaration are automatically defined
inline. Regular C++ functions and member functions declared outside
of a class declaration, with the exception of main,
can be declared or defined as inline with the inline function
specifier. Static locals and string literals defined within the body
of an inline function are treated as the same object across translation
units; see Linkage of inline functions for details.
inline int add(int i, int j) { return i + j; }
The
use of the inline specifier does not change the meaning
of the function. However, the inline expansion of a function may not
preserve the order of evaluation of the actual arguments.The most efficient way to code an inline function is to place the inline function definition in a header file, and then include the header in any file containing a call to the function which you would like to inline.
To enable the inline function
specifier in C, you must compile with c99 or
the LANGLVL(STDC99) or LANGLVL(EXTC99) options. 

// a.c
#include <stdio.h>
inline int foo(){
return 3;
}
void g() {
printf("foo called from g: return value = %d, address = %p\n", foo(), &foo);
}
// b.c
#include <stdio.h>
inline int foo(){
return 3;
}
void g();
int main() {
printf("foo called from main: return value = %d, address = %p\n", foo(), &foo);
g();
}
The output from the compiled program is: foo called from main: return value = 3, address = 0x10000580
foo called from g: return value = 3, address = 0x10000500
// a.c
#include <stdio.h>
inline int foo(){
return 6;
}
void g() {
printf("foo called from g: return value = %d\n", foo());
}
// b.c
#include <stdio.h>
int foo(){
return 3;
}
void g();
int main() {
printf("foo called from main: return value = %d\n", foo());
g();
}
Similarly, if you define a function as extern
inline, or redeclare an inline function
as extern, the function simply becomes a regular,
external function and is not inlined. 