gpt4 book ai didi

c - 如何使用代码中已定义的变量为变量设置值?

转载 作者:行者123 更新时间:2023-11-30 14:35:54 28 4
gpt4 key购买 nike

我首先解释一下我的这段代码

#define __C 130.81
#define __D 146.83
#define __E 164.81
#define __F 174.61
#define __G 196.0
#define __A 220.0
#define __B 246.94


int main(int argc, char *argv[]){

double frequency = 440;

int opt;
int option_index = 0;

static struct option long_options[] =
{
{"freq", required_argument, 0, 1},
...
while ((opt = getopt_long(argc, argv, "f:v:o:hd:0:", long_options, &option_index)) != -1) {
printf("%d\n", opt);
switch (opt) {
case 1:

frequency = [[ SOLVE ME PLS ]]

break;
}
}

注意:这只是摘录,而不是真正的代码。

我想要这个 CLI 是当我执行: ./bin --freq A 时它将设置变量 frequency = __A如果 ./bin --freq D ,然后frequency = __D 。就是这么简单!!.

最佳答案

使用 char 数组和 double 数组,很好地对齐,并使用 strcspn 查找索引:

#include <string.h>
double fq_val[] = {
130.81, 146.83, 164.81, 174.61, 196.0, 220.0, 246.94, -1
};
char *fq_key =
"C" "D" "E" "F" "G" "A" "B"
;
static double get_fq(char *key){
return fq_val[strcspn(fq_key, key)];
}

这使用 -1 作为“无效频率”。

<小时/>

您可以让预处理器为您构建数组,方法是定义一个类似 FQ(C, 130.81) FQ(D, 146.83) ... 的宏以在初始化程序内使用,然后定义 FQ(k, v)#kv,:

#define FQLIST  \
FQ(C, 130.81) \
FQ(D, 146.83) \
FQ(E, 164.81) \
FQ(F, 174.61) \
FQ(G, 196.0) \
FQ(A, 220.0) \
FQ(B, 246.94)

char *fq_key =
#define FQ(k, v) #k
FQLIST
#undef FQ
;
double fq_val[] = {
#define FQ(k, v) v,
FQLIST
#undef FQ
-1
};

关于c - 如何使用代码中已定义的变量为变量设置值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58284143/

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