the macros names (CHECK_FUNCTION, CHECK_STATUS) look very common, there is risk that someone will define them and the code will not compile. It would be safe to put
<pre>
#undef  CHECK_FUNC
#undef CHECK_STATUS
</pre>
before those definitions