学了那么久的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 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

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

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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容