gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 20:08:51 25 4
gpt4 key购买 nike

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

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

在我的函数中,我得到一个 int 参数 argarg 的值可以在 1 到 1000 之间。基于我想将上面的定义分配给变量的 arg 值。即

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;
}

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

最佳答案

How can I achieve this without using if or switch statement ?

您可以将所有 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
}

How to form #define constant name in C?

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

关于c - 如何在C中形成#define常量名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55250375/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com