"INLINE" means it is a macro rather than a function call.
Actually, INLINE means that the function call is marked "inline" which is a hint to the compiler to place the instructions making up the function's body
inline wherever that function is called.
Normally when you define a function its instructions are turned into machine code and placed in one place in the program/library. Every place that calls the function jumps to the function's memory address, executes its instructions, and jumps back (returns) to the caller. The overhead of performing these jumps is small but noticeable if done frequently or in a small loop.
Making a function inline tells the compiler that it is okay to copy the compiled instructions to wherever the function is called. You pay a cost in larger memory/file size for duplicating the instructions, but for small functions it can be worth it.
Notice that the definition for CvPlot::getOwnerINLINE() is omitted if _USRDLL is not defined.
Code:
#ifdef _USRDLL
inline PlayerTypes getOwnerINLINE() const
{
return (PlayerTypes)m_eOwner;
}
#endif
This is used throughout the DLL, and I don't quite know why. My guess is that these same header files are used to build the EXE, and since the EXE will access the code via the DLL mechanism no inline functions are available. The thing is, that doesn't make much sense. There's no technical reason the EXE should be barred from directly accessing the objects created by the DLL, but then I'm not an experienced Windows programmer and only know a little about how DLLs work.
I can see a logical reason to keep SDK inline functions out of the EXE, and perhaps that's why they have it. Except all of the NUM_FOO_TYPES constant definitionsi n CvEnum.h are also guarded by this same mechanism, and I can't think of a reason for that unless it's to force the EXE to use getNumFooInfos(), but why?