3 Commits

Author SHA1 Message Date
5c0a62fdc6 Merge pull request 'dev' (#5) from dev into main
Reviewed-on: #5
2025-12-09 20:00:15 +08:00
dd4b87f4f2 fix: 更新项目名称和URL为CArgParse 2025-12-09 19:59:32 +08:00
0165db3552 fix: 对参数声明进行优化 2025-12-05 15:36:48 +08:00
5 changed files with 91 additions and 85 deletions

View File

@@ -4,12 +4,12 @@ from conan.tools.files import copy
import os
class loggingRecipe(ConanFile):
class CArgParseRecipe(ConanFile):
name = "cargparse"
version = "0.3.2"
license = "MIT"
author = "321640253@qq.com"
url = "https://gitea.youmetme.wang/youmetme/logging"
url = "https://gitea.youmetme.wang/youmetme/CArgParse"
description = "C语言命令行参数解析器"
topics = (
"argparse",

View File

@@ -118,9 +118,9 @@ void argParseAutoHelp(ArgParse *argParse);
* @return Command* 命令指针
*/
Command *argParseAddCommand(ArgParse *argParse,
char *name,
char *help,
char *default_val, // 默认值
const char *name,
const char *help,
const char *default_val, // 默认值
ArgParseCallback callback,
CommandGroup *group,
ArgParseValueType value_type);
@@ -135,9 +135,9 @@ Command *argParseAddCommand(ArgParse *argParse,
* @return Command* 子命令指针
*/
Command *argParseAddSubCommand(Command *Parent,
char *name,
char *help,
char *default_val,
const char *name,
const char *help,
const char *default_val,
ArgParseCallback callback,
CommandGroup *group,
ArgParseValueType value_type);
@@ -154,10 +154,10 @@ Command *argParseAddSubCommand(Command *Parent,
* @return CommandArgs* 参数指针
*/
CommandArgs *argParseAddArg(Command *command,
char *short_opt,
char *long_opt,
char *help,
char *default_val,
const char *short_opt,
const char *long_opt,
const char *help,
const char *default_val,
ArgParseCallback callback,
bool required,
ArgParseValueType value_type);
@@ -174,10 +174,10 @@ CommandArgs *argParseAddArg(Command *command,
* @return
*/
CommandArgs *argParseAddGlobalArg(ArgParse *argParse,
char *short_opt,
char *long_opt,
char *help,
char *default_val,
const char *short_opt,
const char *long_opt,
const char *help,
const char *default_val,
ArgParseCallback callback,
bool required,
ArgParseValueType value_type);
@@ -228,7 +228,7 @@ char **argParseGetCurCommandValues(ArgParse *argParse, int *len);
* @return char* 选项值
* @return
*/
char *argParseGetCurArg(ArgParse *argParse, char *opt);
char *argParseGetCurArg(ArgParse *argParse, const char *opt);
/**
* @brief 获取当前解析到的命令参数列表,仅适用于多值参数
@@ -237,7 +237,7 @@ char *argParseGetCurArg(ArgParse *argParse, char *opt);
* @param len 参数个数buffer
* @return char** 参数列表
*/
char **argParseGetCurArgList(ArgParse *argParse, char *opt, int *len);
char **argParseGetCurArgList(ArgParse *argParse, const char *opt, int *len);
/**
* @brief 获取全局参数
@@ -245,7 +245,7 @@ char **argParseGetCurArgList(ArgParse *argParse, char *opt, int *len);
* @param opt 选项名
* @return char* 选项值
*/
char *argParseGetGlobalArg(ArgParse *argParse, char *opt);
char *argParseGetGlobalArg(ArgParse *argParse, const char *opt);
/**
* @brief 获取全局参数列表,仅适用于多值参数
@@ -254,7 +254,7 @@ char *argParseGetGlobalArg(ArgParse *argParse, char *opt);
* @param len 参数个数buffer
* @return char** 参数列表
*/
char **argParseGetGlobalArgList(ArgParse *argParse, char *opt, int *len);
char **argParseGetGlobalArgList(ArgParse *argParse, const char *opt, int *len);
/**
* @brief 检查当前解析到的命令的某个参数是否被触发
@@ -262,7 +262,7 @@ char **argParseGetGlobalArgList(ArgParse *argParse, char *opt, int *len);
* @param opt 选项名
* @return bool 是否被触发
*/
bool argParseCheckCurArgTriggered(ArgParse *argParse, char *opt);
bool argParseCheckCurArgTriggered(ArgParse *argParse, const char *opt);
/**
* @brief 检查当前解析到的命令是否被触发
@@ -270,7 +270,8 @@ bool argParseCheckCurArgTriggered(ArgParse *argParse, char *opt);
* @param command_name 命令名
* @return bool 是否被触发
*/
bool argParseCheckCommandTriggered(ArgParse *argParse, char *command_name);
bool argParseCheckCommandTriggered(ArgParse *argParse,
const char *command_name);
/**
* @brief 检查全局参数是否被触发
@@ -278,7 +279,7 @@ bool argParseCheckCommandTriggered(ArgParse *argParse, char *command_name);
* @param opt 选项名
* @return bool 是否被触发
*/
bool argParseCheckGlobalTriggered(ArgParse *argParse, char *opt);
bool argParseCheckGlobalTriggered(ArgParse *argParse, const char *opt);
char *argParseGetVal(ArgParse *argParse);
char **argParseGetValList(ArgParse *argParse, int *len);
@@ -306,8 +307,9 @@ char *argParseGenerateHelp(ArgParse *argParse);
* @param short_flag 是否为短选项
* @return char* 选项错误信息
*/
char *
argParseGenerateArgErrorMsg(ArgParse *argParse, char *name, bool short_flag);
char *argParseGenerateArgErrorMsg(ArgParse *argParse,
const char *name,
bool short_flag);
NORETURN void argParseError(ArgParse *argParse,
Command *lastCommand,

View File

@@ -109,9 +109,9 @@ void argParseCommandAutoHelp(Command *command) {
}
Command *argParseAddCommand(ArgParse *argParse,
char *name,
char *help,
char *default_val,
const char *name,
const char *help,
const char *default_val,
ArgParseCallback callback,
CommandGroup *group,
ArgParseValueType value_type) {
@@ -148,9 +148,9 @@ Command *argParseAddCommand(ArgParse *argParse,
* @return
*/
Command *argParseAddSubCommand(Command *Parent,
char *name,
char *help,
char *default_val,
const char *name,
const char *help,
const char *default_val,
ArgParseCallback callback,
CommandGroup *group,
ArgParseValueType value_type) {
@@ -179,10 +179,10 @@ Command *argParseAddSubCommand(Command *Parent,
}
CommandArgs *argParseAddArg(Command *command,
char *short_opt,
char *long_opt,
char *help,
char *default_val,
const char *short_opt,
const char *long_opt,
const char *help,
const char *default_val,
ArgParseCallback callback,
bool required,
ArgParseValueType value_type) {
@@ -209,10 +209,10 @@ CommandArgs *argParseAddArg(Command *command,
}
CommandArgs *argParseAddGlobalArg(ArgParse *argParse,
char *short_opt,
char *long_opt,
char *help,
char *default_val,
const char *short_opt,
const char *long_opt,
const char *help,
const char *default_val,
ArgParseCallback callback,
bool required,
ArgParseValueType value_type) {
@@ -649,7 +649,7 @@ char *argParseGetCurCommandName(ArgParse *argParse) {
* @return char* 选项值
* @return
*/
char *argParseGetCurArg(ArgParse *argParse, char *opt) {
char *argParseGetCurArg(ArgParse *argParse, const char *opt) {
CommandArgs *arg = NULL;
// 尝试获取当前命令的长选项参数
arg = argParseFindCommandArgs(argParse->current_command, opt, false);
@@ -675,7 +675,7 @@ char *argParseGetCurArg(ArgParse *argParse, char *opt) {
* @param len 参数个数buffer
* @return char** 参数列表
*/
char **argParseGetCurArgList(ArgParse *argParse, char *opt, int *len) {
char **argParseGetCurArgList(ArgParse *argParse, const char *opt, int *len) {
CommandArgs *arg = NULL;
arg = argParseFindCommandArgs(argParse->current_command, opt, false);
@@ -696,7 +696,7 @@ char **argParseGetCurArgList(ArgParse *argParse, char *opt, int *len) {
* @param opt 选项名
* @return char* 选项值
*/
char *argParseGetGlobalArg(ArgParse *argParse, char *opt) {
char *argParseGetGlobalArg(ArgParse *argParse, const char *opt) {
CommandArgs *arg = NULL;
arg = argParseFindGlobalArgs(argParse, opt, false);
@@ -750,7 +750,7 @@ char **argParseGetCurCommandValues(ArgParse *argParse, int *len) {
* @param len 参数个数buffer
* @return char** 参数列表
*/
char **argParseGetGlobalArgList(ArgParse *argParse, char *opt, int *len) {
char **argParseGetGlobalArgList(ArgParse *argParse, const char *opt, int *len) {
CommandArgs *arg = NULL;
arg = argParseFindGlobalArgs(argParse, opt, false);
@@ -833,7 +833,7 @@ char *argParseGenerateHelpForCommand(Command *command) {
}
// 检查全局参数是否被触发
bool argParseCheckGlobalTriggered(ArgParse *argParse, char *opt) {
bool argParseCheckGlobalTriggered(ArgParse *argParse, const char *opt) {
CommandArgs *arg = NULL;
arg = argParseFindGlobalArgs(argParse, opt, false);
@@ -847,7 +847,7 @@ bool argParseCheckGlobalTriggered(ArgParse *argParse, char *opt) {
return arg->is_trigged;
}
// 检测当前命令的某项参数是否被触发
bool argParseCheckCurArgTriggered(ArgParse *argParse, char *opt) {
bool argParseCheckCurArgTriggered(ArgParse *argParse, const char *opt) {
CommandArgs *arg = NULL;
arg = argParseFindCommandArgs(argParse->current_command, opt, false);
@@ -861,7 +861,8 @@ bool argParseCheckCurArgTriggered(ArgParse *argParse, char *opt) {
return arg->is_trigged;
}
// 检测指定命令是否被触发
bool argParseCheckCommandTriggered(ArgParse *argParse, char *command_name) {
bool argParseCheckCommandTriggered(ArgParse *argParse,
const char *command_name) {
Command *command = argParseFindCommand(argParse, command_name);
if (command == NULL) {
return false;
@@ -923,8 +924,9 @@ NORETURN void argParseError(ArgParse *argParse,
exit(1);
}
char *
argParseGenerateArgErrorMsg(ArgParse *argParse, char *name, bool short_flag) {
char *argParseGenerateArgErrorMsg(ArgParse *argParse,
const char *name,
bool short_flag) {
if (argParse == NULL) {
return NULL;
}

View File

@@ -11,7 +11,7 @@
* @param str 字符串
* @return 复制后的字符串内存指针
*/
char *stringNewCopy(char *str) {
char *stringNewCopy(const char *str) {
if (str == NULL) {
return NULL;
}
@@ -24,9 +24,9 @@ char *stringNewCopy(char *str) {
}
// 构造命令
Command *createCommand(char *name,
char *help,
char *default_val,
Command *createCommand(const char *name,
const char *help,
const char *default_val,
ArgParseCallback callback,
CommandGroup *group,
ArgParseValueType value_typ) {
@@ -83,7 +83,7 @@ ArgType checkArgType(char *arg) {
}
// 寻找命令
Command *argParseFindCommand(ArgParse *argParse, char *name) {
Command *argParseFindCommand(ArgParse *argParse, const char *name) {
for (size_t i = 0; i < argParse->commands_len; i++) {
if (strcmp(argParse->commands[i]->name, name) == 0) {
return argParse->commands[i];
@@ -92,7 +92,7 @@ Command *argParseFindCommand(ArgParse *argParse, char *name) {
return NULL;
}
Command *argParseFindSubCommand(Command *command, char *name) {
Command *argParseFindSubCommand(Command *command, const char *name) {
for (size_t i = 0; i < command->sub_commands_len; i++) {
if (strcmp(command->sub_commands[i]->name, name) == 0) {
return command->sub_commands[i];
@@ -101,10 +101,10 @@ Command *argParseFindSubCommand(Command *command, char *name) {
return NULL;
}
CommandArgs *createCommandArgs(char *short_opt,
char *long_opt,
char *default_val,
char *help,
CommandArgs *createCommandArgs(const char *short_opt,
const char *long_opt,
const char *default_val,
const char *help,
ArgParseCallback callback,
bool required,
ArgParseValueType value_type) {
@@ -133,7 +133,7 @@ CommandArgs *createCommandArgs(char *short_opt,
}
CommandArgs *
argParseFindCommandArgs(Command *command, char *name, bool short_flag) {
argParseFindCommandArgs(Command *command, const char *name, bool short_flag) {
if (command == NULL) {
return NULL;
}
@@ -155,7 +155,7 @@ argParseFindCommandArgs(Command *command, char *name, bool short_flag) {
}
CommandArgs *
argParseFindGlobalArgs(ArgParse *argParse, char *name, bool short_flag) {
argParseFindGlobalArgs(ArgParse *argParse, const char *name, bool short_flag) {
for (size_t i = 0; i < argParse->global_args_len; i++) {
if (short_flag) {
if (argParse->global_args[i]->short_opt != NULL &&
@@ -178,7 +178,7 @@ argParseFindGlobalArgs(ArgParse *argParse, char *name, bool short_flag) {
* @param val 值
* @return 成功返回true失败返回false
*/
bool argParseSetArgVal(CommandArgs *args, char *val) {
bool argParseSetArgVal(CommandArgs *args, const char *val) {
if (args->value_type == ArgParseMULTIVALUE) { // 多值
args->val = realloc(args->val, (args->val_len + 1) * sizeof(char *));
if (args->val == NULL) {
@@ -212,7 +212,7 @@ bool argParseSetArgVal(CommandArgs *args, char *val) {
return false;
}
bool argParseSetCommandVal(Command *command, char *val) {
bool argParseSetCommandVal(Command *command, const char *val) {
if (command->value_type == ArgParseMULTIVALUE) { // 多值
command->val =
realloc(command->val, (command->val_len + 1) * sizeof(char *));
@@ -252,7 +252,7 @@ bool argParseSetCommandVal(Command *command, char *val) {
* @param val 值
* @return 成功返回true失败返回false
*/
bool argParseSetVal(ArgParse *argParse, char *val) {
bool argParseSetVal(ArgParse *argParse, const char *val) {
if (argParse->value_type == ArgParseMULTIVALUE) { // 多值
argParse->val =
@@ -287,7 +287,7 @@ bool argParseSetVal(ArgParse *argParse, char *val) {
return false;
}
size_t __getStrlen(char *str) {
size_t __getStrlen(const char *str) {
if (str == NULL) {
return 0;
}

View File

@@ -16,22 +16,23 @@ typedef enum {
BAD, // 错误
} ArgType;
Command *createCommand(char *name,
char *help,
char *default_val,
Command *createCommand(const char *name,
const char *help,
const char *default_val,
ArgParseCallback callback,
CommandGroup *group,
ArgParseValueType value_type); // 创建命令
CommandGroup *createCommandGroup(char *name, char *help); // 创建命令组
CommandGroup *createCommandGroup(const char *name,
const char *help); // 创建命令组
CommandGroup *addCommandToGroup(CommandGroup *group,
Command *command); // 添加命令到命令组
CommandArgs *createCommandArgs(char *short_opt,
char *long_opt,
char *default_val,
char *help,
CommandArgs *createCommandArgs(const char *short_opt,
const char *long_opt,
const char *default_val,
const char *help,
ArgParseCallback callback,
bool required,
ArgParseValueType value_type); // 创建命令参数
@@ -42,29 +43,30 @@ CommandArgs *createCommandArgs(char *short_opt,
* @param val 值
* @return 成功返回true失败返回false
*/
bool argParseSetArgVal(CommandArgs *args, char *val); // 设置命令参数值
bool argParseSetArgVal(CommandArgs *args, const char *val); // 设置命令参数值
bool argParseSetCommandVal(Command *command, char *val); // 设置命令值
bool argParseSetCommandVal(Command *command, const char *val); // 设置命令值
bool argParseSetVal(ArgParse *argParse, char *val); // 设置值
bool argParseSetVal(ArgParse *argParse, const char *val); // 设置值
ArgType checkArgType(char *arg); // 检查参数类型
Command *argParseFindCommand(ArgParse *argParse, char *name); // 查找命令
Command *argParseFindCommand(ArgParse *argParse, const char *name); // 查找命令
Command *argParseFindSubCommand(Command *command, char *name); // 查找子命令
Command *argParseFindSubCommand(Command *command,
const char *name); // 查找子命令
CommandArgs *argParseFindCommandArgs(Command *command,
char *name,
bool short_flag); // 查找命令参数
CommandArgs *argParseFindCommandArgs(Command *command,
const char *name,
bool short_flag); // 查找命令参数
CommandArgs *argParseFindGlobalArgs(ArgParse *argParse,
char *name,
bool short_flag); // 查找全局参数
CommandArgs *argParseFindGlobalArgs(ArgParse *argParse,
const char *name,
bool short_flag); // 查找全局参数
char *stringNewCopy(char *str); // 创建字符串副本
char *stringNewCopy(const char *str); // 创建字符串副本
void __catStr(char **dst, int count, ...); // 字符串拼接
size_t __getStrlen(char *str); // 获取字符串长度
size_t __getStrlen(const char *str); // 获取字符串长度
#ifdef __cplusplus
}