现代标准的C语言主函数形式总是带有一个int型的返回值,这个返回值返到哪里?又有什么用呢?
一、获取C语言程序的返回值
有如下程序:
int main(void)
{
return 0;
}
我们要得到这个返回值,可惜的是要得到这个返回值,需要使用操作系统的平台特性,本文的实验在windows操作系统下进行。
在windows操作系统中,主函数的返回值默认下被保存在一个称为errorlevel的系统变量中。我们做实验。
实验一:系统获取C语言主函数的返回值
程序如下:
// main_return.c
#include <stdio.h>
int main(void)
{
printf("hello,world\n");
return 5;
}
编译:
gcc main_return.c -o main_return.exe
后执行main_return.exe程序,将输出hello,world,然后再windows控制台下,输入如下语句:
echo %errorlevel%
将打印 5。
这里echo是windows的控制台命令,可用于输出系统变量的值,其形式为:
echo %系统变量%
即,系统变量要用两个百分号引起来。如何使用这个变量呢?
在设计C程序时,根据程序执行的不同结果,返回不同的值,一般返回0表示顺利执行,返回不同的整数,表示执行过程中发生不同的错误,这个返回值可以作为一个错误代码。
二、windows批处理脚本中使用C程序的返回值
最常见的情形是,在windows脚本调用一个C程序,根据不同的返回值给出下一步操作。
实验二:多种可能返回值的C程序调用
下面C程序完成一个简单的除法运算,除法要求除数不能为0,当除数为0时,我们返回1,除数不为0时,即程序可以顺利执行时,返回0。程序如下:
// main_multiple_return.c
#include <stdio.h>
int main(void)
{
double num1, num2;
printf("Enter two number: ");
scanf("%lf %lf", &num1, &num2);
if(num2 == 0)
return 1;
printf("The result is %.2f\n", num1 / num2);
return 0;
}
首先单独执行这个程序,编译,执行后,若输入:
Enter two number: 4 3
将得到如下结果:
The result is 1.33
此时,执行:
echo %errorlevel%
将得到0。
若输入:
Enter two number: 4 0
将没有输出,执行:
echo %errorlevel%
将得到1。
下面写一个windows批处理脚本来自动执行这个程序并得到相应的返回值。
首先在main_multiple_return.c编译后得到可执行文件的目录下用记事本新建一个txt文件,然后名称改为test_main_return后缀名该文bat。全名为test_main_return.bat
然后用记事本打开,写入如下代码:
@echo off
title test_main_return
main_multiple_return.exe
if %errorlevel% == 0 (
echo OK
) else if %errorlevel% == 1 (
echo ERROR: The divisor cannot be 0
)
@pause
这个批处理脚本中,可以有两种方式指向,一是在控制台下在该脚本所在目录下直接执行test_main_return.bat,二是用鼠标双击执行。
第1行的@echo off用于关闭回显;
第2行的title test_main_return 用于设置弹出的控制台的标题;
第3行执行我们写的main_multiple_return.c 程序编译后生成的exe文件;
第4-8行用于判断errorlevel系统变量得到的值,并得到相应的动作;
第9行的@pause用于阻止控制台闪退,如果没有这一行,鼠标双击,脚本执行完成后,控制台会自动退出。
保存后,鼠标双击,可弹出一个控制台,标题为test_main_return,并运行了main_multiple_return.c程序,如下图所示。
当输入 4 3时,返回提示:
The result is 1.33
OK
请按任意键继续. . .
当输入 4 0时返回提示:
ERROR: The divisor cannot be 0
请按任意键继续. . .
三、其它C程序中使用C程序
可以编写一个C程序调用另外一个C程序,得到返回值。
实验三:C程序得到另一个C程序的返回值
// test_main_return.c
#include <stdio.h>
#include <windows.h>
int main(void)
{
int return_value;
printf("Execute main_multiple_return.exe\n");
return_value = system("main_multiple_return.exe");
if(return_value == 0) {
printf("OK\n");
} else if(return_value == 1) {
printf("ERROR: The divisor cannot be 0\n");
}
return 0;
}
将这个程序和main_multiple_return.c放入到同一个目录下,编译后执行,结果为:
Execute main_multiple_return.exe
Enter two number:
当键入4 3时,返回为:
Execute main_multiple_return.exe
Enter two number: 4 3
The result is 1.33
OK
当键入为4 0时,返回为:
Execute main_multiple_return.exe
Enter two number: 4 0
ERROR: The divisor cannot be 0