[英]How can I set a value to variable using a variable already defined in the code?
我首先解释我的这段代码
#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
__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
作为“无效频率”。
您可以让预处理器为您构建 arrays,方法是定义像FQ(C, 130.81) FQ(D, 146.83)...
这样的宏在初始化程序中使用,然后将FQ(k, v)
定义为#k
或v,
:
#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
};
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.