c语言函数命名写哪里 c语言中函数命名格式( 五 )


有人说“C99建议把main函数指定为int型”,这种说法对吗?显然不对 。因为C99并非绝对不包容返回值非int类型的main() 。正确的说法是,C90要求main()函数的返回值一定得是int型 。但C90容许不写那个int,而C99则要求必须写上这个“int” 。
下面这种风格如何?
?
123456
#include stdio.hint main(){ printf("This is a C program.\n"); return 0;}
这个写法有点不伦不类 。返回值的类型int写了 , 这个和C89的倡导或C99的要求一致,但是()里面什么都不写,又与标准的所倡导的风格不符,所以说不伦不类 。这种写法目前的标准依然容许,但属于标准目前尚能容忍的但即将过时的(obsolescent)写法,被抛弃只是早晚的问题 。这种写法就如同古代的函数形参的写法一样:
?
123456
main(argc,argv)int argc;char *argv[];{ /*…… */ return 0;}
都属于历史的垃圾 。
见过在main()的函数体的“}”之前前写一句getch();,这个是怎么回事?这个是时代的产物 。在PC从DOS时代转变为Windows时代的过程中,DOS时代开发的IDE(主要是TC)无法在运行程序后显示输出结果,为了在运行后从容仔细地观察一下运行结果再返回IED界面,加上了这么一句,人为地延长程序运行时间(因为getch()会等待用户输入一个字符) 。但这与main()本身的结构无关 。这条语句不具备普遍意义,只是将就过时的IDE的一种权宜之计而已 。所谓不具备普遍意义是指,第一,真正的程序往往不需要这条语句,就是说这条语句与程序功能无关;第二 , getch()这个函数并不是标准函数,只有个别的编译器才支持它,在其他编译器上写这条语句,很可能行不通 。
为什么不用getchar()这个标准库函数呢?getchar()的功能和getch()有点区别,前者会在标准输出设备上显示用户键入的字符,这显得很不利索,而后者则不会显示用户所键入的字符 , 更接近“Press Any Key to continue……”的效果 。
有的代码在main()函数结束前写system("PAUSE");,是否也是这个意思?是的 。这也是一种人工制造的“请按任意键继续. . .”,与程序功能结构无关,只是为了方便地观察输出结果 。但是这种写法比调用getch()要好 , 因为system()函数是标准库函数,各个编译器都提供支持 。
有一种说法,“在最新的C99标准中,只有以下两种定义方式是正确的:”
?
12345
int main( void ){ /* */ return 0;}

?
12345
int main( int argc, char *argv[] ){ /* */return 0;}
这种说法对吗?
这种说法显然不对 。但可以确认的是这两种定义方式一定正确 。不但在C99来说是正确的,以C89来说也是正确的 。
还有一种写法:
?
1234
int main( void ){ return EXIT_SUCCESS;}
那个EXIT_SUCCESS是怎么回事?
return EXIT_SUCCESS;是与return 0;等价的一种文雅的写法 。EXIT_SUCCESS是在stdlib.h中定义了的符号常量,返回这个值表示程序任务完成后程序退出 。在stdlib.h定义的另一个符号常量EXIT_FAILURE,通常用于程序无法完成任务而退出 。
实在太眼花缭乱了,需要记住这么多吗?显然没必要 。很多东西都是历史原因遗留下的垃圾 。
如果学习C语言,应该记住或使用哪种呢?显然是:
?
12345
int main( void ){ /* */return 0;}

?
12345
int main( int argc, char *argv[] ){ /* */return 0;}
第一,他们普遍适用,不存在可移植性的问题;
第二,就目前看,他们不存在任何过时或即将过时的成分 。当然,如果喜欢文雅,不写return 0;而写EXIT_SUCCESS也可以 。顺便说一句,有的学习者记不住带参数main()函数两个形参的名字 。其实这两个形参的名字也可以自己?。灰欢ㄓ媚橇礁雒郑灰亲±嘈途涂梢粤?。第二个参数的类型也可以是char **,这和原来的是等价的 。

推荐阅读