首页 > 解决方案 > 如何在 C 中形成#define 常量名?

问题描述

我在头文件中有一个#defines 列表。例如

#define NUM1 123
#define NUM2 456
#define NUM3 789
...
#define NUM1000  111213

在我的函数中,我得到一个int参数arg。的值arg可以在 1 到 1000 之间。根据我想在上面分配的 arg 值定义一个变量。IE

void func(int arg){
    if (arg == 1) {var = NUM1;}
    ....
    if (arg == 50) {var = NUM50;}
    ....
    if (arg == 1000) {var = NUM1000;}
}

如何在不使用 if 或 switch 语句的情况下实现这一点?我尝试使用 char 数组来形成#define常量名:

void func(int arg){
    char name[10];
    sprintf(name,"NUM%d",arg);
    var = name;
}

但我没有看到预期值。任何帮助将不胜感激。

标签: c

解决方案


如何在不使用 if 或 switch 语句的情况下实现这一点?

您可以将所有 1000 个常量放入一个数组中,然后使用它arg来选择您想要的那个。

int list[1000] = {NUM1, NUM2, NUM3, NUM4...NUM1000};

void func(int arg){
    var = list[arg - 1];   // use arg-1 because C arrays start from zero
}

如何在 C 中形成#define 常量名?

你不能,如果你能,它不会帮助你。使用#define 创建的宏由预处理器处理。也就是说,在您的代码发送到编译器本身之前,预处理器会扫描它并将每个宏名称(例如NUM1)替换为相应的值(例如123)。然后将生成的代码传递给编译器,因此编译器甚至看不到宏名称。因此,即使您可以在运行时以某种方式动态创建宏名称,也无法将该名称连接回源代码中与之关联的值。


推荐阅读