I know what include guards are. But I wanted to achieve exactly the opposite : include a file twice. Why? For X Macros :

Code:
// File: color_table.h
X(red, "red")
X(green, "green")
X(blue, "blue")

// File: main.c
#include <stdio.h>

#define X(a, b) a,
enum COLOR {
#include "color_table.h"
};
#undef X

#define X(a, b) b,
char *color_name[] = {
#include "color_table.h"
};
#undef X

int main() {
  enum COLOR c = red;
  printf("c=%s\n", color_name[c]);
  return 0;
}


Source :http://www.drdobbs.com/the-new-c-x-macros/184401387