我可以打印 #defines 给定的 C 语言值吗?

aja*_*ari 0 c

我有

#define ADD 5
#define SUB 6
Run Code Online (Sandbox Code Playgroud)

给定值 5 和 6,我可以打印 ADD 和 SUB 吗?

unw*_*ind 5

不。

d 符号的名称define被预处理器删除,因此编译器永远看不到它们。

如果这些名称在运行时很重要,则需要将它们编码为比预处理器符号名称更持久的内容。也许是一个包含字符串和整数的表:

#define DEFINE_OP(n) { #n, n }

static const struct {
  const char *name;
  int        value;
} operators[] = {
  DEFINE_OP(ADD),
  DEFINE_OP(SUB),
};
Run Code Online (Sandbox Code Playgroud)

这使用字符串化预处理器运算符#来避免重复。

通过以上内容,您可以轻松编写查找代码:

const char * op_to_name(int op)
{
  size_t i;

  for(i = 0; i < sizeof operators / sizeof *operators; ++i)
    if(operators[i].value == op)
      return operators[i].name;
  return NULL;
}
Run Code Online (Sandbox Code Playgroud)