errordef.h:
  MSG(NO_ERROR, "no errors"),
  MSG(xx_NOT_FOUND, "not found"),
  ...

errors.h:
  enum ErrorCode {
  #define MSG(e, m) e
  #include "errordef.h"
  #undef MSG
  };

errors.c:
  #include "errors.h"
  const char *Messages[] = {
  #define MSG(e, m) m
  #include "errordef.h"
  #undef MSG
  };