fix: 对参数声明进行优化

This commit is contained in:
2025-12-05 15:36:48 +08:00
parent f58d83b4ee
commit 0165db3552
4 changed files with 89 additions and 83 deletions

View File

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

View File

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

View File

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

View File

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