c语言中main函数参数,C语言main函数参数,C语言main函数的参数及其返回值详细解析

c语言中main函数参数,C语言main函数参数,C语言main函数的参数及其返回值详细解析

main函数的返回值用来表示程序的退出状态。如果返回0,程序正常退出;返回的其他数字的含义由系统决定。通常,非零返回表示程序异常退出。

返回值的作用

main函数的返回值用来表示程序的退出状态。如果返回0,程序正常退出;返回的其他数字的含义由系统决定。通常,非零返回表示程序异常退出。让我们在winxp环境下做一个小实验。先编译下面的程序:int main(void){ return 0;}然后打开附件中的“命令提示符”,在命令行运行刚刚编译好的可执行文件,然后输入“echo%ERRORLEVEL%”,回车,可以看到程序的返回值为0。假设刚刚编译的文件是a.exe,如果输入“a dir”,就会列出当前目录下的文件夹和文件。但是,如果将其更改为“return -1”或其他非零值,并且在重新编译后输入“a dir ”,则不会执行该dir。因为它的意思是:如果前一个程序正常退出,继续执行后面的程序,否则,不执行。也就是说,利用程序的返回值,我们可以控制是否执行下一个程序。这就是int main的优势。如果有兴趣,还可以把main函数的返回值类型改成非int类型(比如float),重新编译执行“a dir”看看会发生什么,想想为什么会这样。顺便说一句,如果输入一个|| dir,就意味着如果A异常退出,dir就会被执行。

-分界线-分界线-分界线

根据操作系统,返回值是通用的,但是你也可以由程序本身显示程序代码如下(只使用标准C中的内容)# include # include int codevoid my _ exit(void){ printf(' retrun value is % d \ n ',code);} int main(void){ ate xit(my _ exit);返回代码=0;//或者其他返回值。因为code=0表达式的结果是code的值,然后把这个值传递给return,所以和return 0的效果是一样的,只是多了一个给code赋值并输出好的功能。}不要觉得这和直接打印0有什么区别。自己看看atexit函数是什么?它也将帮助你学习main。

-分界线-分界线-分界线

只是举个例子,递归调用main的例子没有实际意义。int num=3;//全局变量int main(){ num-;int i=10if(num=0)int I=main();//递归调用main()

返回0;}设置断点后,调试可以看到I值的变化。

在非递归调用main()的程序中,退出(0)并返回0;的目的是一样的,但是在递归调用main的程序中,exit(0)可以结束程序,而return 0;正在结束当前的主功能。

-分割线-第二部分:C语言之Main函数返回值问题分析-。

很多人甚至在市面上的一些书中使用void main()。其实这是不对的。Void main()在C/C中从来没有定义过,C之父比雅尼斯特劳斯特鲁普在其主页的FAQ中明确写下了定义void main () {}不是也从来不是C,甚至也不是c. (void main()从来不存在于C或C中)。我来分别说说C和C标准中主函数的定义。

" C编程语言(《C 程序设计语言》)使用main(). "-这是因为第一版C语言只有一种类型,就是int,没有char,没有long,没有float,.................在C99中,标准要求编译器对main()的使用至少给出一个警告。

C89中1. C ,main()可接受。Brian W. Kernighan和Dennis M. Ritchie的经典代表作《C程序设计语言2e》(《C 程序设计语言第二版》)使用main()。但在最新的C99标准中,只有以下两个定义是正确的:int main (void) int main (int argc,char * argv [])(参考:ISO/IEC 9899: 1999 (e)编程语言—C5.1.2.2.1程序启动)

当然,我们也可以做一些小改动。比如:char *argv[]可以写成char * * argvArgv和argc可以改为其他变量名(如intval和charval),但必须符合变量的命名规则。

如果不需要从命令行获取参数,使用int main(void);否则,使用int main( int argc,char *argv[])。

主函数的返回值类型必须是int,这样返回值才能传递给程序的激活器(比如操作系统)。

如果主函数末尾没有写return语句,C99规定编译器要自动给生成的目标文件(如exe文件)加return 0;表示程序正常退出。不过我还是建议你最好在主函数的末尾加一个return语句。虽然没必要,但这是个好习惯。注意,vc6不会向目标文件添加返回0;可能是因为vc6是98年的产品,所以不支持这个功能。现在明白我为什么建议你最好加上退货声明了吧!但是GCC 3.2(Linux下的C编译器)会在生成的目标文件中加入return 0;

2. C++c98定义了以下两个主要函数:int main () int main (int argc,char * argv [])(参考:ISO/IEC 14882(1998年9月1日)编程语言—c3.6开始和终止)

Int main()相当于C99中的int main(void);int main( int argc,char *argv[])的用法和C99中定义的一样。同样,main函数的返回值类型必须是int。如果主函数末尾没有写return语句,C 98规定编译器要自动给生成的目标文件加return 0;同样,vc6不支持这个特性,但是g 3.2(Linux下的C编译器)支持。

3. 关于 void main 在C和C中,不接收任何参数也不返回任何信息的函数的原型是“void foo(void);”。可能正因为如此,很多人误以为不需要程序返回值就可以将main函数定义为void main(void)。然而,这是错误的!主函数的返回值应该定义为int类型,这在C和C标准中都有规定。虽然在某些编译器中,可以编译void main(比如vc6),但并不是所有的编译器都支持void main,因为标准中从未定义过void main。在3.2中,如果主函数的返回值不是int类型,那么它根本不会被编译。而gcc3.2将发出警告。所以,如果你希望你的程序有良好的可移植性,请一定要使用int main。

-总而言之: VoidMain注意,新标准不允许默认返回值,即int不能保存,对应的Main函数不再支持void返回值。所以为了让程序具有可移植性,强烈建议使用:int main(){ return 0;} -

第三部分:关于main(int argc, char *argv[])

节选自以下段落:

c是命令行中参数的总数。argv[]是argc参数,其中第0个参数是程序的全名。以下参数为用户输入的参数,如:int main (int argc,char * argv[]){ int I;for(I=0;iargccoutargv[I]endl;cini返回0;}执行时,键入f:\ my docu ~ 1 \ tempcode \ D1 \ debug \ d1.exe AAAA BBB CCCDDD。输出如下:f:\ my docu ~ 1 \ tempcode \ D1 \ debug \ d1.exe AAAA

ccc ddd

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • c语言调用退出函数 c语言退出整个程序怎么写
  • c语言中怎么给函数初始化 c语言的初始化语句
  • c语言编写函数计算平均值 c语言求平均函数
  • 详解c语言中的字符串数组是什么,详解c语言中的字符串数组结构,详解C语言中的字符串数组
  • 表达式求值c++实现,c语言实现表达式求值
  • 看懂c语言基本语法,C语言详解,C语言的基本语法详解
  • 用c语言实现快速排序算法,排序算法设计与实现快速排序C语言,C语言实现快速排序算法实例
  • 深入解析c语言中函数指针的定义与使用方法,深入解析c语言中函数指针的定义与使用情况,深入解析C语言中函数指针的定义与使用
  • 描述E-R图,E-R图举例,关于C语言中E-R图的详解
  • 折半查找法C语言,折半查找算法(算法设计题)
  • 折半查找法C语言,c语言折半法查找数据,C语言实现折半查找法(二分法)
  • 扫雷小游戏c++代码设计,c语言扫雷游戏源代码,C语言实现扫雷小游戏详细代码
  • 怎样统计程序代码行数,C语言统计行数,C#程序员统计自己的代码行数
  • 基于c语言的贪吃蛇游戏程序设计,用c语言编写贪吃蛇游戏程序,C语言实现简单的贪吃蛇游戏
  • 图的两种遍历算法,图的遍历算法代码c语言,Python算法之图的遍历
  • 留言与评论(共有 条评论)
       
    验证码: