将宏字符串转换为宏

时间:2015-12-09 14:55:57

标签: c macros

一个字符串如何" EINVAL"被转换成EINVAL?

我必须将很多宏字符串转换为它们的值,可以做什么?

1 个答案:

答案 0 :(得分:3)

这是我能想到的最简单的方法:

#include <errno.h>

if (!strcmp(str, "EINVAL"))
    value = EINVAL;

没有预处理器技巧可以将字符串文字转换为相应的符号。

但您可以使用预处理器来简化此类测试的序列:

    value = 0;
#define conv(s)  do { if (!strcmp(str, #s)) value = s; } while (0)
    conv(EINVAL);
    conv(ENOMEM);
    conv(ERANGE);
    conv(EINTR);
#undef conv

通常,请小心预处理器......