diff --git a/README.md b/README.md index 8fa6f0c..9e4a2a9 100644 --- a/README.md +++ b/README.md @@ -34,7 +34,7 @@ conan create . ## 示例程序 -构建简单的命令行程序 +构建简单的命令行程序,更多示例请参考`example`目录 ```c #include "ArgParse.h" #include @@ -42,7 +42,7 @@ conan create . #include ArgParse *Init() { - ArgParse *ap = argParseInit("简单的命令行工具示例"); + ArgParse *ap = argParseInit("简单的命令行工具示例",NOVALUE); // 添加第一个命令 Command *cmd = argParseAddCommand( diff --git a/conanfile.py b/conanfile.py index 8485c80..d952c58 100644 --- a/conanfile.py +++ b/conanfile.py @@ -6,7 +6,7 @@ import os class loggingRecipe(ConanFile): name = "cargparse" - version = "0.3.0" + version = "0.3.1" license = "MIT" author = "321640253@qq.com" url = "https://gitea.youmetme.wang/youmetme/logging" diff --git a/include/ArgParse.h b/include/ArgParse.h index ba42540..767aa26 100644 --- a/include/ArgParse.h +++ b/include/ArgParse.h @@ -7,6 +7,12 @@ extern "C" { #endif +#ifdef _MSC_VER +#define NORETURN __declspec(noreturn) +#else +#define NORETURN _Noreturn +#endif + #define ARG_DEFAULT_HELP_FLAG "--help" typedef struct ArgParse ArgParse; // 解析器 @@ -16,10 +22,10 @@ typedef int (*ArgParseCallback)(ArgParse *argParse, int val_len); // 回调函数 typedef enum { - NOVALUE = 0, // 无值 - SINGLEVALUE, // 单值 例如: -i https://www.baidu.com - MULTIVALUE, // 多值 例如: -s a b c 或 -s a -s b -s c等 -} ArgParseValueType; // 值类型 + ArgParseNOVALUE = 0, // 无值 + ArgParseSINGLEVALUE, // 单值 例如: -i https://www.baidu.com + ArgParseMULTIVALUE, // 多值 例如: -s a b c 或 -s a -s b -s c等 +} ArgParseValueType; // 值类型 typedef struct CommandArgs { /* 构造属性 */ @@ -69,7 +75,7 @@ typedef struct ArgParse { struct CommandArgs **global_args; // 全局参数 int global_args_len; // 全局参数个数 char *documentation; // 帮助文档 - ArgParseValueType value_type; // 值类型 程序默认需要的值例如 gcc main.c + ArgParseValueType value_type; // 值类型 程序默认需要的值例如 gcc main.c /* 解析所用到的属性*/ struct Command *current_command; // 当前解析到的命令 @@ -303,10 +309,10 @@ char *argParseGenerateHelp(ArgParse *argParse); char * argParseGenerateArgErrorMsg(ArgParse *argParse, char *name, bool short_flag); -_Noreturn void argParseError(ArgParse *argParse, - Command *lastCommand, - const char *prefix, - const char *suffix); +NORETURN void argParseError(ArgParse *argParse, + Command *lastCommand, + const char *prefix, + const char *suffix); #ifdef __cplusplus } diff --git a/src/ArgParse.c b/src/ArgParse.c index 1142849..f7a71d5 100644 --- a/src/ArgParse.c +++ b/src/ArgParse.c @@ -818,7 +818,7 @@ bool argParseCheckCommandTriggered(ArgParse *argParse, char *command_name) { return command->is_trigged; } -_Noreturn void argParseError(ArgParse *argParse, +NORETURN void argParseError(ArgParse *argParse, Command *lastCommand, const char *prefix, const char *suffix) {