学了那么久的C语言可能连主函数都不会用

学了那么久的C语言可能连主函数都不会用

学到过函数的同学们会知道函数是可以有参数和返回值的。其实我们用的主函数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\test how are you

那么test工程的main函数参数argc=4;

argv[0]将保存字符串"C:\TC\test"的首地址;

argv[1]将保存字符串"how"的首地址;

argv[2]将保存字符串"are"的首地址;

argv[3]将保存字符串"you"的首地址;

下面的例子打印所有的argv参数:

main(int argc, char *argv[])

{

int i;

printf("\nTotal %d arguments",argc);

for(i=0;i

{

printf("\nArgument %d = %s ",i+1, argv);

}

}

如果编译后的exe文件名称为test,在DOS下运行C:\TC\test how are you,结果输出:

Total 4 arguments

Argument 1 = C:\TC\test.exe

Argument 2 = how

Argument 3 = are

Argument 4 = you

如果觉得我文章还可以的,可以关注,收藏,转发,评论。

如果有想学习或者再学习C语言的同学可以关注私聊发送“C语言”我会给大家提供 交流环境,学习资料和指导。

那么文章到这里就结束了。大家端午节快乐。


分享到:


相關文章: