我有

#define ADD 5
#define SUB 6

我可以打印ADD和SUB给它们的值5和6吗?

最佳答案

不。
预处理器会删除defined符号的名称,因此编译器永远看不到它们。
如果这些名称在运行时很重要,则需要使用比预处理器符号名称更持久的编码。可能是一个包含字符串和整数的表:

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

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

这使用stringifying preprocessor操作符#来避免重复。
使用上面的代码,您可以轻松地编写查找代码:
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;
}

关于c - 我可以在C中给定它们的值打印#define吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12509038/

10-11 19:43