传入的全局变量我定义了一些int类型的全局变量,我希望它们与命令行参数匹配,以避免if
语句带有strcmp
的连续链。例如,如果我已经定义了全局变量myvar
,并且用户输入myvar
作为命令行参数,我希望能够引用myvar
并使用argv[]
对其执行操作。这可以做到吗?引用使用argv []
编辑我的问题只是为了多一点明确:
目前,我不得不这样做:
int* A;
int* B;
int* C;
int set(void)
{
if (strcmp((gargv[2]), "A") == 0)
{
*A = atoi(gargv[3]);
return *A;
}
else if (strcmp((gargv[2]), "B") == 0)
{
*B = atoi(gargv[3]);
return *B;
}
else if (strcmp((gargv[2]), "C") == 0)
{
*C = atoi(gargv[3]);
return *C;
}
else
{
errx(EX_USAGE, "Invalid");
}
}
int main (int argc, char** argv)
{
gargv = argv;
void* mem_chunk = calloc(5, sizeof(int));
A = &mem_chunk[1];
B = &mem_chunk[2];
C = &mem_chunk[3];
if (strcmp(argv[1], "set") == 0)
{
set();
}
}
但它会少的方式繁琐,只是做这样的事情,在那里我可以设置argv[2]
到argv[3]
,它引用了全局变量A,B,或C:
int* A;
int* B;
int* C;
int set(void)
{
gargv[2] = gargv[3];
// example, if A and 10 given by user then set A = 10 and return
}
int main (int argc, char** argv)
{
gargv = argv;
void* mem_chunk = calloc(5, sizeof(int));
A = &mem_chunk[1];
B = &mem_chunk[2];
C = &mem_chunk[3];
if (strcmp(argv[1], "set") == 0)
{
set();
}
}
是的,使用的strcmp链 –
或者使用'getopt',并根据需要通过所需要的参数和值。匹配的全局变量看起来好像是一种无所谓的方法,但我并不完全清楚你想实现的目标。 –