main() 处理命令行选项

       首先,先了解下什么叫做命令行选项呢?命令行选项是在dos环境(如果是windows操作系统,那么在“开始”菜单下找到“运行”,然后键入“cmd”,即可进入dos环境)下执行的命令,它是有空格分隔的命令。例如:

             prog -d -o ofile data0

       prog:是可执行文件的文件名,如prog.exe是可执行文件,它的文件名是prog。至于后面的参数是什么意思后面的介绍将会讲到。

       main()函数的一种扩展原型为:

         main( int argc, char *argv[] )

         {...}

        命令行选项是main()的实参。在main()函数中,我们可以通过一个名为argv的C风格字符串数组访问它。argc包含命令行选项的个数,argv包含argc个C风格字符串,代表了由空格分隔的命令选项。例如对于上面刚才的举的命令行选项,argc和argv的值分别如下:

        argc = 5

argv的值被设置成如下的C风格字符串:

       argv[0] = "prog" ;

       argv[1] = "-d" ;

       argv[2] = "-o" ;

       argv[3] = "ofile" ;

       argv[4] = "data0" ;

       argv[0] 总是被设置为当前正被调用的命令。比如本例是prog.exe命令正在被调用,所以argv[0]的值是prog。从索引1到argc-1表示被传递给命令的实际选项。

命令行选项的格式如下:

           program_name [-d] [-h] [-v] [-o output_file] [-l limit_value] file_name [file_name [file_name [ ... ]]]

方括号的内容是可选的。例如,最小的命令行只要给出要处理的文件:

           prog chap1.doc

-d:表示准备调试

-h:表示打开帮助文档

-v:表示显示版本信息

-o:表示处理输出文件

-l:准备处理限制量

 

main函数的参数如何获得实参的值呢?

        由于main函数不能被其它函数调用, 因此不可能在程序内部取得实际值。那么,在何处把实参值赋予main函数的形参呢? 实际上,main函数的参数值是从操作系统命令行上获得的。当我们要运行一个可执行文件时,在DOS提示符下键入文件名,再输入实际参数即可把这些实参传 送到main的形参中去。

下面举一个具体的例子:

#include <iostream>
using namespace std;
int main(int argc,char *argv[])  
{  
 cout << "argc= " << argc << endl;  
 for(int i=0;i<argc;i++)  
 {  
  cout << "argv[" << i << "] = " << argv[i] <<endl;  
 }  
 return 0;  
}

首先,我们先编译且运行该文件,得到如下的结果:

从上面我们可以知道:

argc = 1

argv[0]为可执行命令的路径。

然后我们根据可执行文件的路径进入到该文件下,即进入dos环境下:

可以看到这时argc 和argv的值了。

 

### C++ 中 `main` 函数及其命令行参数解析 #### 主函数签名 在C++中,程序入口通常是`main`函数。此函数可以不带参数声明为`int main()`或`int main(void)`[^4]。 当需要处理命令行参数时,`main`函数通常采用以下形式之一: - `int main(int argc, char *argv[])` - 或者等效地写作 `int main(int argc, char **argv)` 这里,`argc`代表传递给程序的实际参数数量(包括程序名本身),而`argv[]`是一个指向字符数组的指针列表,每个元素对应于一个命令行参数字符串[^2]。 对于Windows平台上的Unicode支持,还可以看到微软特有的扩展版本如`wmain`以及通过宏定义实现跨编码兼容性的`_tmain`[^1]。 #### 参数解释 具体来说,在上述两种常见形式下: - `argc`: Argument Count 的缩写,表示传入命令行参数的数量; - `argv`: Argument Vector 的缩写,存储着这些参数的具体值;其中`argv[0]`总是当前执行文件的名字路径[^3]。 下面给出一段简单的例子来展示如何读取并打印所有接收到的命令行输入项: ```cpp #include <iostream> using namespace std; int main(int argc, char* argv[]) { cout << "Program name: " << argv[0] << endl; for (int i = 1; i < argc; ++i) cout << "Argument #" << i << ": " << argv[i] << endl; return 0; } ``` 这段代码会遍历所有的命令行参数并将它们逐个显示出来。如果运行该程序时附带了一些额外选项或者文件名作为参数,则可以在应用程序内部访问到这些数据。 #### 处理逻辑 为了更灵活地解析复杂的命令行指令集,开发者可能会考虑使用第三方库比如Boost.Program_options或是Google Flags等工具来进行高级别的配置管理与验证工作。不过对于简单场景而言,直接利用内置机制已经足够满足需求了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值