开源一个C语言命令行解析库
C语言做命令行解析,说复杂也不复杂,GNU库提供了getopt
和argp
两个命令行解析工具,甚至自己用strcmp
就能实现。但是当命令繁多,需要嵌套子命令,或是需要更多的自定义时,这两个库就不够看了。
根据我自己使用上的需要和总结,我写了一个自己的命令行解析库cmdparser
。在使用简单、保证代码简洁的同时,也提供了很多扩展点,同时有完善的测试和使用示例。
项目地址:https://github.com/XUJINKAI/cmdparser
主要特点:
-
定义在一个结构体中,保证代码结构清晰简单。
-
常见的长短选项支持
-a --all -n XJK --name=XJK --age 18
,短选项支持缩写-an XJK
-
子命令支持嵌套,支持别名。
-
动态控制子命令和长短选项隐藏或停用。
-
自定义帮助文档和错误提示信息。
使用示例
定义一个全局的结构体,指定好回调函数,然后调用cmdp_run
函数即可。
static cmdp_command_st cmdp = {
.options = {
{'i', "Int", "Input Int Option", CMDP_TYPE_INT4, &arg.i},
{0}, // 以{0}结束
},
.fn_process = callback, // 回调函数
};
int main(int argc, char **argv)
{
return cmdp_run(argc - 1, argv + 1, &cmdp);
}
其中arg是一个全局的结构体,用于储存解析结果,完整的代码在demo_simple。
嵌套子命令,可设置sub_commands
字段,如下:
static cmdp_command_st cmdp = {
.options = {...},
.sub_commands = (cmdp_command_st[]){
{
.name = "sub",
.options = {...},
.fn_process = sub_callback,
},
{0}, // 以{0}结束
},
};
demo_git是一个仿照git命令的示例程序,展示了更复杂的情况。
test目录中是测试代码,其中有自定义错误提示,为子命令设置别名等示例。
这套库迭代了好几版,现在趋于稳定,自己用着感觉不错,所以放出来,欢迎star和提issue。
Disqus评论加载中...