【main参数】main函数的参数|命令行参数

本文详细介绍了C++中处理命令行参数的方法,包括getopt()、getopt_long()和getopt_long_only()函数的使用,以及argagg这个C++11命令行参数分析器的介绍。讲解了各个函数的参数、使用示例和注意事项,帮助开发者理解如何解析和处理命令行参数。
摘要由CSDN通过智能技术生成

目录

main函数的参数

C++ 命令行参数解析

说明

短选项名之 getopt()

长短选项名之 getopt_long()

长短选项名之 getopt_long_only()

argagg, 一个简单的C++11 命令行 参数分析器

简介

心理模型

API参考

快速参考

结构

异常

安装

边缘案例

贪婪参数

添加参数转换

Linux下getopt()函数的简单使用


main函数的参数

第一个带参数的main。

#include <iostream.h>

 
int main(int argc,char *argv[])
{
       for(inti=0;i<argc;i++)
       {
              cout<<argv[i]<<'\t';              //
       }
       return0;
}

/*

int argc, char **argv 用于运行时,把命令行参数传入主程序。

argc -- 命令行参数总个数,包括 可执行程序名。

argv[i] -- 第 i 个参数。

argv[0] -- 可执行程序名。

*/

关于带参数的main函数网络收集:int main(int argc,char **argv) 这里面的**argv含义··

是用来传递参数的,假如你编译成的文件名是a.exe,那么在命令提示符下可以通过a.exe12 34来向程序传递参数,这时两个参数就会传递到字符串数组argv中,注意此时实际传递了三个参数,第一个参数是文件名,第二个参数是12,第三个是34,而argc就是参数个数。

int argc, char **argv 用于运行时,把命令行参数传入主程序。

argc -- 命令行参数 总个数,包括 可执行程序名。

argv[i] --  第 i 个参数。

argv[0] -- 可执行程序名。

 
// 例如运行:

abc.exe

argc 等于 1, argv[0] 是 "abc.exe"

// 例如运行:

rec.exe  4  5.2

argc 等于 3, argv[0] 是 "rec.exe", argv[1] 是 "4", argv[2] 是 "5.2".

主函数里若有:

int x;

float y;

char s[80];

strcpy(s,argv[0]);  // 程序名存入 了 s

sscanf(argv[1],"%d",&x);  // x 得到数值4

sscanf(argv[2],"%f",&y);  // y 得到数值 5.2


ANSI-C(C89/C99)的话main()函数有2种主要形式。 

(1) int main(void) 
(2) int main(int argc, char *argv[]) 

(2)也可写成int main(int argc, char **argv) 
argv[argc]放空指针(NULL指针)。 
argc和argv可以用别名。 

另外,还有一种受系统限制的形式: 
int main(int argc, char *argv[], char *envp[]) 
前两个参数同(2),第三个参数envp[]放环境变量。 
这个形式很少用。 

所以严格讲, 
ANSI-C推荐的带参数的main()函数只有上面(2)这一种。 

另外,搜集了一下C和C++中常见的几种形式: 

(1) main() 
(2) int main() 
(3) int main(void) 
(4) int main(int, char**) 
(5) int main(int, char*[]) 
(6) int main(int argc, char **argv) 
(7) int main(int argc, char *argv[]) 
(8) int main( int argc, char *argv[], char*envp[]) 
(9) void main(void)

(1)是(3)的简写。不推荐使用。 
(2)是(3)的简写。在C++中是正确的形式。 
(3)在C和C++中都是正确的形式。推荐使用。(还有缺省int的main(void)形式)。 
(4)和(5)是不用参数时的一种写法。编译器级别高时会警告。不推荐使用。 
(6)是(7)的另外写法。两种都可以,凭个人爱好。 
(7)是带参数的正确的形式。推荐使用。 
(8)是一种很少用的写法,且受系统限制。 
(9)一般不认为是正确的写法。但是在嵌入式系统中有使用(包括void main()形式)

原文:http://www.cnblogs.com/zerocc/archive/2010/12/17/1909642.html

C++ 命令行参数解析

说明


主要参考以下博客:

博客一:getopt和getopt_long函数

博客二:C++中如何自定义命令行参数——完整实例演示

博客三:使用 Qt 解析命令行参数

博客四:linux c/c++中getopt的使用

短选项名之 getopt()


头文件:#include <unistd.h>

函数原型:int getopt(int argc, char * const argv[], const char *optstring);

参数解释:[param1] argc: main 函数的 argc[param2] argv: main 函数的 argv[param3] optstring: 格式控制符。"ab:c:d"代表 -b 和 -b 选项后面有冒号,表示必须跟一个参数(如 -b 77),而 -a 和 -d 后面没有冒号,表示不需要参数,如果(gcc -g ……)详细说明见文章后面相关章节

相关变量:extern char *optarg; 表示参数的具体内容extern int optind; 表下一个将被处理到的参数在 argv 中的下标值extern int opterr;extern int optopt;

测试案例:

// Opt.cpp
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>

// 短参数测试案例
void testGetOpt(int argc, char *argv[]) {
    int opt;  // getopt() 的返回值
    const char *optstring = "a:b:c:d"; // 设置短参数类型及是否需要参数

    while ((opt = getopt(argc, argv, optstring)) != -1) {
        printf("opt = %c\n", opt);  // 命令参数,亦即 -a -b -c -d
        printf("optarg = %s\n", optarg); // 参数内容
        printf("optind = %d\n", optind); // 下一个被处理的下标值
        printf("argv[optind - 1] = %s\n\n",  argv[optind - 1]); // 参数内容
    }
}

int main(int argc, char *argv[]) {
    testGetOpt(argc, argv);
    return 0;
}

正确的使用方法(√):

[User@ubuntu:~/Desktop]$ opt.exe -a a_para -b b_para -c c_para -d	# 参数全用
[User@ubuntu:~/Desktop]$ opt.exe -a a_para -b b_para -d				# 部分参数
[User@ubuntu:~/Desktop]$ opt.exe -b b_para -a a_para				# 可以倒序
[User@ubuntu:~/Desktop]$ opt.exe  									# 可以无参

错误的使用方法(×):

[User@ubuntu:~/Desktop]$ opt.exe -a  					# -a 后面没有跟参数
[User@ubuntu:~/Desktop]$ opt.exe -a a_para -d d_para  	# -d 后面跟了参数

长短选项名之 getopt_long()


头文件:#include <getopt.h>

函数原型:int getopt(int argc, char * const argv[], const char *optstring, const struct option *longopts, int *longindex);

参数解释:[param1] argc: main 函数的 argc[param2] argv: main 函数的 argv[param3] optstring: 格式控制符[param4] longopts: 一个由option结构体组成的数组,数组的每个元素

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值