我可以从静态const char*数组中定义以下宏"unstringifying"吗?

Pal*_*han 0 c c++ macros boost c-preprocessor

我在一个.c文件中有以下内容(这是一个小得多的数组来举例说明):

static const char* __someNames[] =
{
    "Fox",
    "Wulf",
    "Cat"
};
Run Code Online (Sandbox Code Playgroud)

然后我会定义一个像这样的宏:

#define EXAMPLE(N) XXX
Run Code Online (Sandbox Code Playgroud)

在哪里,我希望XXX被替换为__someNames[N]没有"..ie我想

#define EXAMPLE(1)
Run Code Online (Sandbox Code Playgroud)

扩展到:

Wulf
Run Code Online (Sandbox Code Playgroud)

我怎么能这样做?

编辑

一些很酷的想法.这更多是出于对我想要做的好奇心的好奇心.我喜欢#include"file.h#两次使用重新定义的宏的想法......如果我也可以使用boost预处理器(我添加了c ++和boost标签来提问) - 我是否可以绕过额外的"file.h"?每个字符串#define的字符串也很酷,但考虑到我会有多少#defines ...

Mat*_*son 7

我认为你的X问题的解决方案(你已经问过Y解决方案)就是转过头来使用宏来放入字符串,然后使用相同的宏重新定义来做你想做的其他事情.

例如:

#define EXAMPLE(x)   #x,

static const char* __someNames[] =
{

#include "file.h"
};

#undef EXAMPLE
#define EXAMPLE(x)   x,

enum animals 
{
#include "file.h"
};
Run Code Online (Sandbox Code Playgroud)

其中file.h包含:

EXAMPLE(Fox)
EXAMPLE(Wulf)
EXAMPLE(Cat)
Run Code Online (Sandbox Code Playgroud)