我有
#define ADD 5
#define SUB 6
我可以打印ADD和SUB给它们的值5和6吗?
最佳答案
不。
预处理器会删除define
d符号的名称,因此编译器永远看不到它们。
如果这些名称在运行时很重要,则需要使用比预处理器符号名称更持久的编码。可能是一个包含字符串和整数的表:
#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/