Possível converter a lista de #defines em strings

Suponha que eu tenha uma lista de#defines em um arquivo de cabeçalho para uma biblioteca externa. Estes#defines representam códigos de erro retornados de funções. Eu quero escrever uma função de conversão que possa tomar como entrada um código de erro e retornar como saída uma literal de string representando o real#define nome.

Como exemplo, se eu tiver

#define NO_ERROR 0
#define ONE_KIND_OF_ERROR 1
#define ANOTHER_KIND_OF_ERROR 2

Eu gostaria que uma função pudesse chamar como

int errorCode = doSomeLibraryFunction();
if (errorCode)
    writeToLog(convertToString(errorCode));

E temconvertToString() poder converter automaticamente esse código de erro sem ser uma caixa de comutação gigante parecida com

const char* convertToString(int errorCode)
{
    switch (errorCode)
    {
        case NO_ERROR:
           return "NO_ERROR";
        case ONE_KIND_OF_ERROR:
           return "ONE_KIND_OF_ERROR";
        ...
     ...
...

Tenho a sensação de que, se isso for possível, seria possível usar modelos e metaprogramação, mas isso só funcionaria se os códigos de erro fossem realmente um tipo e não um monte de macros de processador.

questionAnswers(7)

yourAnswerToTheQuestion