08-检查命令行参数
13.2.1 检查命令行参数
首先,程序清单13.1中的程序检查 argc 的值,查看是否有命令行参数。如果没有,程序将打印一条消息并退出程序。字符串 argv[0] 是该程序的名称。显式使用 argv[0] 而不是程序名,错误消息的描述会随可执行文件名的改变而自动改变。这一特性在像UNIX这种允许单个文件具有多个文件名的环境中也很方便。但是,一些操作系统可能不识别 argv[0] ,所以这种用法并非完全可移植。
exit() 函数关闭所有打开的文件并结束程序。 exit() 的参数被传递给一些操作系统,包括UNIX、Linux、Windows和MS-DOS,以供其他程序使用。通常的惯例是:正常结束的程序传递 0 ,异常结束的程序传递非零值。不同的退出值可用于区分程序失败的不同原因,这也是UNIX和DOS编程的通常做法。但是,并不是所有的操作系统都能识别相同范围内的返回值。因此,C标准规定了一个最小的限制范围。尤其是,标准要求 0 或宏 EXIT_SUCCESS 用于表明成功结束程序,宏 EXIT_FAILURE 用于表明结束程序失败。这些宏和 exit() 原型都位于 stdlib.h 头文件中。
根据ANSI C的规定,在最初调用的 main() 中使用 return 与调用 exit() 的效果相同。因此,在 main() ,下面的语句:
return 0;
和下面这条语句的作用相同:
exit(0);
但是要注意,我们说的是“最初的调用”。如果 main() 在一个递归程序中, exit() 仍然会终止程序,但是 return 只会把控制权交给上一级递归,直至最初的一级。然后 return 结束程序。 return 和 exit() 的另一个区别是,即使在其他函数中(除 main() 以外)调用 exit() 也能结束整个程序。