Categories
c design-patterns singleton

How to create a Singleton in C?

What’s the best way to create a singleton in C? A concurrent solution would be nice.

I am aware that C isn’t the first language you would use for a singleton.

First, C is not suitable for OO programming. You’d be fighting all the way if you do. Secondly, singletons are just static variables with some encapsulation. So you can use a static global variable. However, global variables typically have far too many ills associated with them. You could otherwise use a function local static variable, like this:

 int *SingletonInt() {
static int instance = 42;
return &instance;
}

or a smarter macro:

#define SINGLETON(t, inst, init) t* Singleton_##t() { \
static t inst = init; \
return &inst; \
}
#include <stdio.h>
/* actual definition */
SINGLETON(float, finst, 4.2);
int main() {
printf("%f\n", *(Singleton_float()));
return 0;
}

And finally, remember, that singletons are mostly abused. It is difficult to get them right, especially under multi-threaded environments…