¿Hacer algo tanto un identificador C como una cadena?

Digamos que quieres generar una lista coincidente de identificadores y cadenas

enum
{
NAME_ONE,
NAME_TWO,
NAME_THREE
};

myFunction(NAME_ONE, "NAME_ONE");
myFunction(NAME_TWO, "NAME_TWO");
myFunction(NAME_THREE, "NAME_THREE");

..sin repetirse, y sin generar automáticamente el código, usando macros C / C ++

Estimación inicial:

Podría agregar un archivo #include que contenga

myDefine(NAME_ONE)
myDefine(NAME_TWO)
myDefine(NAME_THREE)

Entonces úsalo dos veces como:

#define myDefine(a) a,
enum {
#include "definitions"
}
#undef myDefine

#define myDefine(a) myFunc(a, "a");
#include "definitions"
#undef myDefine

pero #define no te deja poner parámetros dentro de una cadena?

Respuestas a la pregunta(2)

Su respuesta a la pregunta