gpt4 book ai didi

C: getopt 以及可接受的 optarg 列表。最佳实践是什么?

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

我正在编写一个 C 程序,它是无数工具的前端。这个前端将像这样启动:

my-frontend --action <AN ACTION>

由于所有工具都具有相同的前缀,因此在此示例中,该前缀为“foo”。我想将“AN ACTION”连接到此前缀并执行此操作(如果该工具存在)。

我已经写了一些东西,但我的实现使用 strcmp 来测试“AN ACTION”是否是有效的操作。即使这有效,我也不喜欢它。所以我正在寻找一个更好的解决方案来完成同样的任务。可能性列表非常小(小于 10)并且是静态的(列表是“硬编码的”),但我确信有一种更“C 风格”的方法来做到这一点(使用结构或类似的东西)。由于我不是 C 专家,因此我请求您的帮助。

问候

最佳答案

看看getopt_long 。它是标准 C 库的一部分。有关 C 程序如何以标准 UNIX 方式处理参数的完整文档,check this .

上面应该给你论据了。但我发现你的问题还不止于此。处理多个后端可以这样完成:

struct cmds {
char *name;
void (*cmd)(int argc, char **argv);
};

你可以像这样声明一个cmd_table:

struct cmds cmd_table[] = {
{ "backend1", backend1_exec },
{ "backend2", backend2_exec },
...
};

backend1_exec()backend2_exec() 只是真正为您执行真正后端的繁重工作的函数。

然后在您的 main() 函数中,只需循环遍历 cmd_table 中的每个条目与参数进行比较,然后调用相应的后端函数,如下所示:

if (strcmp(cmdname, cmd_table[i].name)) {
*(cmd_table[i].cmd)(argc, argv);
}

是的,如果表中只有 10 个条目,那么使用 strcmp() 没有任何问题。它不是程序的性能关键部分,所以我不会对此太担心。据我所知,这种方法是处理此问题的一种流行方法(这并不使它具有权威性,但可能有助于让您放心,您没有做错任何事情)。

关于C: getopt 以及可接受的 optarg 列表。最佳实践是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2952547/

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