2 Commits

Author SHA1 Message Date
56a50201fe fix: 修正枚举值命名规范 2025-09-30 10:10:41 +08:00
7b2acabfd6 style: 统一代码格式和命名规范 2025-09-30 10:06:53 +08:00
7 changed files with 62 additions and 64 deletions

View File

@@ -42,11 +42,11 @@ conan create .
#include <string.h> #include <string.h>
ArgParse *Init() { ArgParse *Init() {
ArgParse *ap = argParseInit("简单的命令行工具示例",NOVALUE); ArgParse *ap = argParseInit("简单的命令行工具示例",ArgParseNOVALUE);
// 添加第一个命令 // 添加第一个命令
Command *cmd = argParseAddCommand( Command *cmd = argParseAddCommand(
ap, "list", "列出文件列表", NULL, NULL, NULL, SINGLEVALUE); ap, "list", "列出文件列表", NULL, NULL, NULL, ArgParseSINGLEVALUE);
// 添加第一个命令的参数 // 添加第一个命令的参数
argParseAddArg(cmd, argParseAddArg(cmd,
@@ -56,7 +56,7 @@ ArgParse *Init() {
NULL, NULL,
NULL, NULL,
false, false,
NOVALUE); ArgParseNOVALUE);
return ap; return ap;
} }

View File

@@ -4,11 +4,11 @@
#include <string.h> #include <string.h>
ArgParse *Init() { ArgParse *Init() {
ArgParse *ap = argParseInit("简单的命令行工具示例",NOVALUE); ArgParse *ap = argParseInit("简单的命令行工具示例",ArgParseNOVALUE);
// 添加第一个命令 // 添加第一个命令
Command *cmd = argParseAddCommand( Command *cmd = argParseAddCommand(
ap, "list", "列出文件列表", NULL, NULL, NULL, SINGLEVALUE); ap, "list", "列出文件列表", NULL, NULL, NULL, ArgParseSINGLEVALUE);
// 添加第一个命令的参数 // 添加第一个命令的参数
argParseAddArg(cmd, argParseAddArg(cmd,
@@ -18,7 +18,7 @@ ArgParse *Init() {
NULL, NULL,
NULL, NULL,
false, false,
NOVALUE); ArgParseNOVALUE);
return ap; return ap;
} }

View File

@@ -7,14 +7,12 @@
extern "C" { extern "C" {
#endif #endif
#ifdef _MSC_VER #ifdef _MSC_VER
#define NORETURN __declspec(noreturn) #define NORETURN __declspec(noreturn)
#else #else
#define NORETURN _Noreturn #define NORETURN _Noreturn
#endif #endif
#define ARG_DEFAULT_HELP_FLAG "--help" #define ARG_DEFAULT_HELP_FLAG "--help"
typedef struct ArgParse ArgParse; // 解析器 typedef struct ArgParse ArgParse; // 解析器
@@ -24,10 +22,10 @@ typedef int (*ArgParseCallback)(ArgParse *argParse,
int val_len); // 回调函数 int val_len); // 回调函数
typedef enum { typedef enum {
NOVALUE = 0, // 无值 ArgParseNOVALUE = 0, // 无值
SINGLEVALUE, // 单值 例如: -i https://www.baidu.com ArgParseSINGLEVALUE, // 单值 例如: -i https://www.baidu.com
MULTIVALUE, // 多值 例如: -s a b c 或 -s a -s b -s c等 ArgParseMULTIVALUE, // 多值 例如: -s a b c 或 -s a -s b -s c等
} ArgParseValueType; // 值类型 } ArgParseValueType; // 值类型
typedef struct CommandArgs { typedef struct CommandArgs {
/* 构造属性 */ /* 构造属性 */
@@ -77,7 +75,7 @@ typedef struct ArgParse {
struct CommandArgs **global_args; // 全局参数 struct CommandArgs **global_args; // 全局参数
int global_args_len; // 全局参数个数 int global_args_len; // 全局参数个数
char *documentation; // 帮助文档 char *documentation; // 帮助文档
ArgParseValueType value_type; // 值类型 程序默认需要的值例如 gcc main.c ArgParseValueType value_type; // 值类型 程序默认需要的值例如 gcc main.c
/* 解析所用到的属性*/ /* 解析所用到的属性*/
struct Command *current_command; // 当前解析到的命令 struct Command *current_command; // 当前解析到的命令
@@ -312,9 +310,9 @@ char *
argParseGenerateArgErrorMsg(ArgParse *argParse, char *name, bool short_flag); argParseGenerateArgErrorMsg(ArgParse *argParse, char *name, bool short_flag);
NORETURN void argParseError(ArgParse *argParse, NORETURN void argParseError(ArgParse *argParse,
Command *lastCommand, Command *lastCommand,
const char *prefix, const char *prefix,
const char *suffix); const char *suffix);
#ifdef __cplusplus #ifdef __cplusplus
} }

View File

@@ -67,7 +67,7 @@ void argParseAutoHelp(ArgParse *argParse) {
NULL, NULL,
__helpCallback, __helpCallback,
false, false,
NOVALUE); ArgParseNOVALUE);
} }
int __commandHelpCallback(ArgParse *argParse, char **val, int val_len) { int __commandHelpCallback(ArgParse *argParse, char **val, int val_len) {
@@ -96,7 +96,7 @@ void argParseCommandAutoHelp(Command *command) {
NULL, NULL,
__commandHelpCallback, __commandHelpCallback,
false, false,
NOVALUE); ArgParseNOVALUE);
} }
Command *argParseAddCommand(ArgParse *argParse, Command *argParseAddCommand(ArgParse *argParse,
@@ -314,7 +314,7 @@ int __processArgs(ArgParse *argParse, CommandArgs *arg, int arg_index) {
int current_index = arg_index; int current_index = arg_index;
if (arg->value_type == MULTIVALUE) { if (arg->value_type == ArgParseMULTIVALUE) {
for (int i = arg_index + 1; i < argParse->argc; i++) { for (int i = arg_index + 1; i < argParse->argc; i++) {
if (checkArgType(argParse->argv[i]) == if (checkArgType(argParse->argv[i]) ==
COMMAND) { // COMMAND是无--或-开头的字符串,也可认定为参数值 COMMAND) { // COMMAND是无--或-开头的字符串,也可认定为参数值
@@ -325,12 +325,12 @@ int __processArgs(ArgParse *argParse, CommandArgs *arg, int arg_index) {
break; break;
} }
} }
} else if (arg->value_type == SINGLEVALUE) { } else if (arg->value_type == ArgParseSINGLEVALUE) {
if (arg_index + 1 < argParse->argc) { if (arg_index + 1 < argParse->argc) {
argParseSetArgVal(arg, argParse->argv[arg_index + 1]); argParseSetArgVal(arg, argParse->argv[arg_index + 1]);
current_index = arg_index + 1; current_index = arg_index + 1;
} }
} else if (arg->value_type == NOVALUE) { } else if (arg->value_type == ArgParseNOVALUE) {
current_index = arg_index; current_index = arg_index;
} }
@@ -437,7 +437,7 @@ int __processCommand(ArgParse *argParse, char *name, int command_index) {
command = argParseFindCommand(argParse, name); // 查找命令 command = argParseFindCommand(argParse, name); // 查找命令
if (command == NULL && argParse->value_type == NOVALUE) { if (command == NULL && argParse->value_type == ArgParseNOVALUE) {
char *msg = NULL; char *msg = NULL;
if (name != NULL) { if (name != NULL) {
msg = stringNewCopy("\033[1;31mERROR\033[0m:"); msg = stringNewCopy("\033[1;31mERROR\033[0m:");
@@ -449,7 +449,7 @@ int __processCommand(ArgParse *argParse, char *name, int command_index) {
return -1; return -1;
} }
if (command == NULL && argParse->value_type != NOVALUE) { if (command == NULL && argParse->value_type != ArgParseNOVALUE) {
return __processVal(argParse, command_index); return __processVal(argParse, command_index);
} }
@@ -463,7 +463,7 @@ int __processCommand(ArgParse *argParse, char *name, int command_index) {
switch (argType) { switch (argType) {
case COMMAND: { case COMMAND: {
// 命令无值则处理子命令 // 命令无值则处理子命令
if (command->value_type == NOVALUE) { if (command->value_type == ArgParseNOVALUE) {
__processSubCommand(argParse, command, argParse->argv[i], i); __processSubCommand(argParse, command, argParse->argv[i], i);
return argParse->argc - 1; return argParse->argc - 1;
} else { } else {
@@ -751,12 +751,12 @@ char *argParseGenerateHelpForCommand(Command *command) {
__catStr(&help_msg, 2, "\033[1;33mUsage\033[0m: ", command->name); __catStr(&help_msg, 2, "\033[1;33mUsage\033[0m: ", command->name);
switch (command->value_type) { switch (command->value_type) {
case NOVALUE: case ArgParseNOVALUE:
break; break;
case SINGLEVALUE: case ArgParseSINGLEVALUE:
__catStr(&help_msg, 1, " <value>"); __catStr(&help_msg, 1, " <value>");
break; break;
case MULTIVALUE: case ArgParseMULTIVALUE:
__catStr(&help_msg, 1, " <value>..."); __catStr(&help_msg, 1, " <value>...");
} }

View File

@@ -179,7 +179,7 @@ argParseFindGlobalArgs(ArgParse *argParse, char *name, bool short_flag) {
* @return 成功返回true失败返回false * @return 成功返回true失败返回false
*/ */
bool argParseSetArgVal(CommandArgs *args, char *val) { bool argParseSetArgVal(CommandArgs *args, char *val) {
if (args->value_type == MULTIVALUE) { // 多值 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) {
return false; return false;
@@ -190,7 +190,7 @@ bool argParseSetArgVal(CommandArgs *args, char *val) {
} }
args->val_len++; args->val_len++;
return true; return true;
} else if (args->value_type == SINGLEVALUE) { // 单值 } else if (args->value_type == ArgParseSINGLEVALUE) { // 单值
if (args->val != NULL) { if (args->val != NULL) {
free(args->val); free(args->val);
} }
@@ -205,7 +205,7 @@ bool argParseSetArgVal(CommandArgs *args, char *val) {
} }
args->val_len = 1; args->val_len = 1;
return true; return true;
} else if (args->value_type == NOVALUE) { // 无值 } else if (args->value_type == ArgParseNOVALUE) { // 无值
return true; return true;
} }
@@ -213,7 +213,7 @@ bool argParseSetArgVal(CommandArgs *args, char *val) {
} }
bool argParseSetCommandVal(Command *command, char *val) { bool argParseSetCommandVal(Command *command, char *val) {
if (command->value_type == MULTIVALUE) { // 多值 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 *));
if (command->val == NULL) { if (command->val == NULL) {
@@ -225,7 +225,7 @@ bool argParseSetCommandVal(Command *command, char *val) {
} }
command->val_len++; command->val_len++;
return true; return true;
} else if (command->value_type == SINGLEVALUE) { // 单值 } else if (command->value_type == ArgParseSINGLEVALUE) { // 单值
if (command->val != NULL) { if (command->val != NULL) {
free(command->val); free(command->val);
} }
@@ -240,7 +240,7 @@ bool argParseSetCommandVal(Command *command, char *val) {
} }
command->val_len = 1; command->val_len = 1;
return true; return true;
} else if (command->value_type == NOVALUE) { // 无值 } else if (command->value_type == ArgParseNOVALUE) { // 无值
return true; return true;
} }
return false; return false;
@@ -254,7 +254,7 @@ bool argParseSetCommandVal(Command *command, char *val) {
*/ */
bool argParseSetVal(ArgParse *argParse, char *val) { bool argParseSetVal(ArgParse *argParse, char *val) {
if (argParse->value_type == MULTIVALUE) { // 多值 if (argParse->value_type == ArgParseMULTIVALUE) { // 多值
argParse->val = argParse->val =
realloc(argParse->val, (argParse->val_len + 1) * sizeof(char *)); realloc(argParse->val, (argParse->val_len + 1) * sizeof(char *));
if (argParse->val == NULL) { if (argParse->val == NULL) {
@@ -266,7 +266,7 @@ bool argParseSetVal(ArgParse *argParse, char *val) {
} }
argParse->val_len++; argParse->val_len++;
return true; return true;
} else if (argParse->value_type == SINGLEVALUE) { // 单值 } else if (argParse->value_type == ArgParseSINGLEVALUE) { // 单值
if (argParse->val != NULL) { if (argParse->val != NULL) {
free(argParse->val); free(argParse->val);
} }
@@ -281,7 +281,7 @@ bool argParseSetVal(ArgParse *argParse, char *val) {
} }
argParse->val_len = 1; argParse->val_len = 1;
return true; return true;
} else if (argParse->value_type == NOVALUE) { // 无值 } else if (argParse->value_type == ArgParseNOVALUE) { // 无值
return true; return true;
} }
return false; return false;

View File

@@ -4,7 +4,7 @@
#include <string.h> #include <string.h>
ArgParse *initArgParse() { ArgParse *initArgParse() {
ArgParse *argparse = argParseInit("测试程序",NOVALUE); ArgParse *argparse = argParseInit("测试程序",ArgParseNOVALUE);
Command *command = NULL; Command *command = NULL;
Command *sub_command = NULL; Command *sub_command = NULL;
@@ -16,13 +16,13 @@ ArgParse *initArgParse() {
NULL, NULL,
NULL, NULL,
false, false,
NOVALUE); ArgParseNOVALUE);
argParseAddGlobalArg( argParseAddGlobalArg(
argparse, "-q", "--quiet", "Quiet mode", NULL, NULL, false, NOVALUE); argparse, "-q", "--quiet", "Quiet mode", NULL, NULL, false, ArgParseNOVALUE);
// add arguments // add arguments
command = argParseAddCommand( command = argParseAddCommand(
argparse, "install", "Install the package", NULL, NULL, NULL, NOVALUE); argparse, "install", "Install the package", NULL, NULL, NULL, ArgParseNOVALUE);
argParseAddArg(command, argParseAddArg(command,
"-i", "-i",
"--index", "--index",
@@ -30,7 +30,7 @@ ArgParse *initArgParse() {
"https://example.com", "https://example.com",
NULL, NULL,
false, false,
SINGLEVALUE); ArgParseSINGLEVALUE);
argParseAddArg(command, argParseAddArg(command,
"-f", "-f",
"--file", "--file",
@@ -38,7 +38,7 @@ ArgParse *initArgParse() {
"package.json", "package.json",
NULL, NULL,
false, false,
MULTIVALUE); ArgParseMULTIVALUE);
argParseAddArg(command, argParseAddArg(command,
"-p", "-p",
"--package", "--package",
@@ -46,10 +46,10 @@ ArgParse *initArgParse() {
"package.json", "package.json",
NULL, NULL,
false, false,
MULTIVALUE); ArgParseMULTIVALUE);
sub_command = argParseAddSubCommand( sub_command = argParseAddSubCommand(
command, "tools", "Install tools", NULL, NULL, NULL, MULTIVALUE); command, "tools", "Install tools", NULL, NULL, NULL, ArgParseMULTIVALUE);
argParseAddArg(sub_command, argParseAddArg(sub_command,
"-t", "-t",
@@ -58,9 +58,9 @@ ArgParse *initArgParse() {
"Tool name", "Tool name",
NULL, NULL,
true, true,
MULTIVALUE); ArgParseMULTIVALUE);
sub_command = argParseAddSubCommand( sub_command = argParseAddSubCommand(
command, "tools_sub", "Install tools", NULL, NULL, NULL, MULTIVALUE); command, "tools_sub", "Install tools", NULL, NULL, NULL, ArgParseMULTIVALUE);
argParseAddArg(sub_command, argParseAddArg(sub_command,
"-s", "-s",
@@ -69,7 +69,7 @@ ArgParse *initArgParse() {
"tools subcommand test", "tools subcommand test",
NULL, NULL,
true, true,
MULTIVALUE); ArgParseMULTIVALUE);
command = argParseAddCommand(argparse, command = argParseAddCommand(argparse,
"uninstall", "uninstall",
@@ -77,7 +77,7 @@ ArgParse *initArgParse() {
NULL, NULL,
NULL, NULL,
NULL, NULL,
SINGLEVALUE); ArgParseSINGLEVALUE);
argParseAddArg(command, argParseAddArg(command,
"-p", "-p",
"--package", "--package",
@@ -85,7 +85,7 @@ ArgParse *initArgParse() {
"Package name", "Package name",
NULL, NULL,
true, true,
MULTIVALUE); ArgParseMULTIVALUE);
return argparse; return argparse;
} }

View File

@@ -5,7 +5,7 @@
#include <string.h> #include <string.h>
ArgParse *initArgParse() { ArgParse *initArgParse() {
ArgParse *argparse = argParseInit("测试程序", MULTIVALUE); ArgParse *argparse = argParseInit("测试程序", ArgParseMULTIVALUE);
Command *command = NULL; Command *command = NULL;
Command *sub_command = NULL; Command *sub_command = NULL;
@@ -17,13 +17,13 @@ ArgParse *initArgParse() {
NULL, NULL,
NULL, NULL,
false, false,
NOVALUE); ArgParseNOVALUE);
argParseAddGlobalArg( argParseAddGlobalArg(
argparse, "-q", "--quiet", "Quiet mode", NULL, NULL, false, NOVALUE); argparse, "-q", "--quiet", "Quiet mode", NULL, NULL, false, ArgParseNOVALUE);
// add arguments // add arguments
command = argParseAddCommand( command = argParseAddCommand(
argparse, "install", "Install the package", NULL, NULL, NULL, NOVALUE); argparse, "install", "Install the package", NULL, NULL, NULL, ArgParseNOVALUE);
argParseAddArg(command, argParseAddArg(command,
"-i", "-i",
"--index", "--index",
@@ -31,7 +31,7 @@ ArgParse *initArgParse() {
"https://example.com", "https://example.com",
NULL, NULL,
false, false,
SINGLEVALUE); ArgParseSINGLEVALUE);
argParseAddArg(command, argParseAddArg(command,
"-f", "-f",
"--file", "--file",
@@ -39,7 +39,7 @@ ArgParse *initArgParse() {
"package.json", "package.json",
NULL, NULL,
false, false,
MULTIVALUE); ArgParseMULTIVALUE);
argParseAddArg(command, argParseAddArg(command,
"-p", "-p",
"--package", "--package",
@@ -47,10 +47,10 @@ ArgParse *initArgParse() {
"package.json", "package.json",
NULL, NULL,
false, false,
MULTIVALUE); ArgParseMULTIVALUE);
sub_command = argParseAddSubCommand( sub_command = argParseAddSubCommand(
command, "tools", "Install tools", NULL, NULL, NULL, MULTIVALUE); command, "tools", "Install tools", NULL, NULL, NULL, ArgParseMULTIVALUE);
argParseAddArg(sub_command, argParseAddArg(sub_command,
"-t", "-t",
@@ -59,9 +59,9 @@ ArgParse *initArgParse() {
"Tool name", "Tool name",
NULL, NULL,
true, true,
MULTIVALUE); ArgParseMULTIVALUE);
sub_command = argParseAddSubCommand( sub_command = argParseAddSubCommand(
command, "tools_sub", "Install tools", NULL, NULL, NULL, MULTIVALUE); command, "tools_sub", "Install tools", NULL, NULL, NULL, ArgParseMULTIVALUE);
argParseAddArg(sub_command, argParseAddArg(sub_command,
"-s", "-s",
@@ -70,7 +70,7 @@ ArgParse *initArgParse() {
"tools subcommand test", "tools subcommand test",
NULL, NULL,
true, true,
MULTIVALUE); ArgParseMULTIVALUE);
command = argParseAddCommand(argparse, command = argParseAddCommand(argparse,
"uninstall", "uninstall",
@@ -78,7 +78,7 @@ ArgParse *initArgParse() {
NULL, NULL,
NULL, NULL,
NULL, NULL,
SINGLEVALUE); ArgParseSINGLEVALUE);
argParseAddArg(command, argParseAddArg(command,
"-p", "-p",
"--package", "--package",
@@ -86,7 +86,7 @@ ArgParse *initArgParse() {
"Package name", "Package name",
NULL, NULL,
true, true,
MULTIVALUE); ArgParseMULTIVALUE);
return argparse; return argparse;
} }