C语言中函数的声明、定义及使用的入门教程

2020-01-06 14:11:37刘景俊

都属于历史的垃圾。

见过在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标准中,只有以下两种定义方式是正确的:”


int main( void )
{ 
 /* */
 return 0;
}


int main( int argc, char *argv[] )
{
 /* */
  return 0;
}

这种说法对吗?

这种说法显然不对。但可以确认的是这两种定义方式一定正确。不但在C99来说是正确的,以C89来说也是正确的。

还有一种写法:


int main( void )
{
 return EXIT_SUCCESS;
}

那个EXIT_SUCCESS是怎么回事?

return EXIT_SUCCESS;是与return 0;等价的一种文雅的写法。EXIT_SUCCESS是在stdlib.h中定义了的符号常量,返回这个值表示程序任务完成后程序退出。在stdlib.h定义的另一个符号常量EXIT_FAILURE,通常用于程序无法完成任务而退出。

实在太眼花缭乱了,需要记住这么多吗?显然没必要。很多东西都是历史原因遗留下的垃圾。