I\'ve come across some code that has a large static function in a header file and i\'m just curious when it is/is not ok to do this. For example, if many .c
fil
Some ideas:
mylib123__foobar
, and #define foobar mylib123__foobar
in the header file, so this one seems a little iffy.)Perhaps the function is merely a wrapper for an external function, and the way the wrapper works might depend on compile-time options in the calling compilation unit. For example:
static int foobar(int x)
{
return real_foobar(COMPILETIME_PARAMETER, x);
}
You might say just use macros, but what if foobar
needs to be called via a function pointer for the intended usage?
With that having been said...
In reality, the main reason people put static
functions in header files is usually based on some 10-years-outdated notion that it will improve performance, by permitting the compiler to inline the function or whatnot. Most people who do this have not done any measurement. Since modern compilers can compile the whole program as a unit if asked, and this theoretically results in a lot more possibilities for optimization, and since it's a questionable optimization to begin with, I'm really skeptical of placement of functions in headers for performance purposes.
This criticism especially applies the OP's example of "large" static functions in header files. There's almost no way a large function could benefit from inlining unless a constant argument value allows the compiler to eliminate 90% of the code or something. (For a real-world example of this extreme case, see some of the crazy inline function/macro definitions used in libavcodec
. :-)