__forceinline
isn't standard C, but some compiler-specific non-standard extension (Keil?). The compiler is telling you just that - it doesn't know what the keyword does since it isn't valid C.
Generally, the compiler is much more capable than the programmer in determining what to inline, why the standard inline
keyword is mostly an obsolete feature nowadays (just like register
).
There's very few cases where you actually need to enforce inlining. For the rare case when you do, you should probably have done the inlining by hand, possibly in assembler, or perhaps through a function-like macro. Function-like macros are generally to be avoided, but they are less worse practice than non-standard keywords IMO.