Implementing not-quite-namespaces in C

February 28, 2010 on 11:24 am | In General |

Hi, all!

A few days ago i came across a trick in C. It isn’t new, but i hadn’t seen it used quite this way before and i wanted to share it…

Background: i have several mini-libraries which i tend to copy directly in to other projects. It has happened that i then use two other libraries together, and both of them internally use the same underlying mini-library. In some cases i want each to continue to use their own copy (maybe a different/incompatible version), but not collide with the other copy. Here’s one way to do it…

In the lib’s main header, before we declare any of its API:

#if !defined(MY_NS)
#  define MY_NS(X) my_namespace_prefix_ ## X
#endif

We then declare our types and functions using that macro:

int MY_NS(func1)( ... );
struct MY_NS(type1) { ... };

And throughout the implementation and client code we use:

int x = MY_NS(func1)( ... );

Each library which wants to import and rename the API then simply has to redefine MY_NS while building the included mini-library.

The major down-side is that this construct makes reading the docs through tools like doxygen more difficult.

Happy hacking!

1 Comment »

RSS feed for comments on this post. TrackBack URI

Leave a comment

XHTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>


HINT: the code is R X K X (without spaces!)

Powered by WordPress with Pool theme design by Borja Fernandez.
Entries and comments feeds. Valid XHTML and CSS. ^Top^