#define PLACE_X(x)x
#define PLACE(x)PLACE_X(x)
#define QUOTE_X(x)#x
#define QUOTE(x)QUOTE_X(x)
#define STRIPL_X(x, y)PLACE(x)
#define STRIPL(x)PLACE(STRIPL_X)x
#define STRIPR_X(x, y)PLACE(y)
#define STRIPR(x)PLACE(STRIPR_X)x
#define MYLIST() (node1, (node2, (node3, null)))
#define MYLIST_X(l)\
STRIPL(l)STRIPL(STRIPR(l))
/*** Static API Declaration
_________________________________***/
static char prompt_getchar(char const*);
#define promptexit_getchar(vzmp_buf)\
((int)prompt_getchar((vzmp_buf)))
/*** Static API Definition
_________________________________***/
/* Entry
-------------------*/
int main(void) {
{
printf("%s\n", QUOTE(MYLIST()));
printf("%s\n", QUOTE(MYLIST_X(MYLIST())));
} return promptexit_getchar("\n\n--- press to exit ---\n");
}
/* Displays a prompt and waits on getchar
-------------------*/
char prompt_getchar(char const *buf) {
printf("%s", buf);
return getchar();
}
Does that work for you?