首页 > 前沿技术 正文
学了那么久的C语言可能连主函数都不会用

时间:2022-11-18 18:08:36 阅读: 评论: 作者:

  学到过函数的同学们会知道函数是可以有参数和返回值的。其实我们用的主函数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<argc;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语言”我会给大家提供 交流环境,学习资料和指导。

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