学到过函数的同学们会知道函数是可以有参数和返回值的。其实我们用的主函数main()函数也是有参数和返回值的, 很多人甚至市面上的一些书籍,都使用了void main( ) ,其实这是错误的。C/C++ 中从来没有定义过void main( )。C++之父 Bjarne Stroustrup 在他的主页上的 FAQ 中明确地写着 The definition void main( ) {}is not and never has been C++, nor has it even been C.( void main( )从来就不存在于C++ 或者 C )。下面我分别说一下 C 和 C++ 标准中对 main 函数的定义。
C++98 中定义了如下两种 main 函数的定义方式:
int main( )
int main( int argc, char *argv[] )
1. main() 参数
在Turbo C2.0启动过程中,传递main()函数三个参数:argc,argv和env。
* argc: 整数,为传给main()的命令行参数个数。
* argv: 字符串数组。
在DOS 3.X 版本中,argv[0] 为程序运行的全路径名;
对DOS 3.0 以下的版本,argv[0]为空串("") 。
argv[1] 为在DOS 命令行中执行程序名后的第一个字符串;
argv[2] 为执行程序名后的第二个字符串;
...
变量名称argc和argv是常规的名称,当然也可以换成其他名称。那么,实际参数是如何传递给main函数的argc和argv的呢?我们知道,C程序在编译和链接后,都生成一个exe文件,执行该exe文件时,可以直接执行;也可以在命令行下带参数执行,命令行执行的形式为:可执行文件名称 参数1 参数2 ... ... 参数n。可执行文件名称和参数、参数之间均使用空格隔开。
如果按照这种方法执行,命令行字符串将作为实际参数传递给main函数。具体为:
(1) 可执行文件名称和所有参数的个数之和传递给argc;
(2) 可执行文件名称(包括路径名称)作为一个字符串,首地址被赋给argv[0],参数1也作为一个字符串,首地址被赋给argv[1],... ...依次类推。
例如,现在运行命令行(test是编译后的exe文件名称):
C:TC est how are you
那么test工程的main函数参数argc=4;
argv[0]将保存字符串"C:TC est"的首地址;
argv[1]将保存字符串"how"的首地址;
argv[2]将保存字符串"are"的首地址;
argv[3]将保存字符串"you"的首地址;
下面的例子打印所有的argv参数:
main(int argc, char *argv[])
{
int i;
printf("
Total %d arguments",argc);
for(i=0;i
{
printf("
Argument %d = %s ",i+1, argv);
}
}
如果编译后的exe文件名称为test,在DOS下运行C:TC est how are you,结果输出:
Total 4 arguments
Argument 1 = C:TC est.exe
Argument 2 = how
Argument 3 = are
Argument 4 = you
如果觉得我文章还可以的,可以关注,收藏,转发,评论。
那么文章到这里就结束了。大家端午节快乐。