C语言main函数返回值详解

前言:本文程序代码均在Windows + mingw64环境下编译完成(gcc)

 

C语言的main函数有两个标准写法

// C99加入两种 main 标准写法
int main(void)    // 标准一写法
// 和
int main(int argc,char *argv[])    // 标准二写法
int main(int argc,char **argv)     // 等介于标准二写法

// ==================================================

// 但C99之前就比较随便了,如下边两种写法比较常见于VC6.0(C89)
main()
void main()    // 单片机上这种写法比较多,因为不用返回给系统

main函数返回值说明

从C99开始,规定main函数必须返回一个int变量值,其值是返回给系统用的

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

返回非零值代表程序异常退出,而main函数给返回个0,则表示“非异常退出”,即正确执行并退出。

 正常情况下写的C语言程序则可以从如下代码开始:

#include 

int main(int argc, char* argv[])
{
    // 我要写的程序代码开始位置
    return 0;    // 执行正确并退出
}

// 或

#include 

int main(void)
{
    // 我要写的程序代码开始位置
    return 0;    // 执行正确并退出
}

main函数返回值应用举例

很多时候要完成一个问题,需要几个程序按顺序的去执行,如果有一个程序执行错误,后边的程序就不执行了。

这里有两个简单的C语言程序

程序1:

// Hello.c
#include 

int main(void)
{
    printf("Hello\n");
    return 0;    // 返回个正确执行并退出值
}

程序2:

// World.c
#include 

int main(void)
{
    printf("World\n");
    return 1;    // 返回个非零值(错误值)
}

对这两个程序进行编译和执行,显示如图:

C语言main函数返回值详解_第1张图片 编译程序 C语言main函数返回值详解_第2张图片 程序执行显示截图

echo %ERRORLEVEL%   // 为输出上一次程序执行的返回值

Linux系统下为echo $?

 接着多个程序的执行,执行过程如下:

# 第一次执行两个程序
E:\测试时间>Hello.exe && World.exe
Hello
World

# 第二次执行两个程序(顺序换一下)
E:\测试时间>World.exe && Hello.exe
World

E:\测试时间>

 

C语言main函数返回值详解_第3张图片 两个程序不同顺序执行结果截图

 

 执行过程说明:

  1. 第一次执行:Hello.exe && World.exe 两个程序都执行且输出相应的字符串
  2. 第二次执行:World.exe && Hello.exe 只有World.exe执行输出,而Hello.exe并没有执行输出

&& 说明:连接二个命令的。前面的命令执行正确后才会执行后面的命令。 

 

实例(获取被调用程序返回值)

在实际应用程序开发过程中,经常会调用到其它程序来完成一些事情,比如很多程序会调用nmap这款著名的扫描程序等。

这里简单举例一下调用外部程序执行

被调用程序源代码(辅程序):

// tex.c
#include 
#include 

int main(int argc,char *argv[])
{
    printf("Hello World!\n");
    for(int i = 0; i

调用程序源代码(主程序):

// wo.c
#include 
#include 
#include 

int main(void)
{
    DWORD dwExitCode = 0;
    SHELLEXECUTEINFO ShExecInfo = {0};        // ShellExecuteEx调用例程及定义
    ShExecInfo.cbSize = sizeof(SHELLEXECUTEINFO);
    ShExecInfo.fMask = SEE_MASK_NOCLOSEPROCESS;
    ShExecInfo.hwnd = NULL;
    ShExecInfo.lpVerb = ("open");
    ShExecInfo.lpFile = ("tex.exe");//要调用程序的文件
    ShExecInfo.lpParameters = ("我要给tex程序的参数 >><<");//传递给要调用执行程序的参数
    ShExecInfo.lpDirectory = NULL;
    ShExecInfo.nShow = SW_SHOW;
    ShExecInfo.hInstApp = NULL;
    ShellExecuteEx(&ShExecInfo);  // 可生成句柄,供WaitForSingleObject调用
    WaitForSingleObject(ShExecInfo.hProcess,INFINITE);
    GetExitCodeProcess(ShExecInfo.hProcess, &dwExitCode);//获取程序执行返回的结果
    printf("Exit code(Read) : %d\n", dwExitCode);
    return 0;
}

编译程序:

C语言main函数返回值详解_第4张图片

执行程序,调用过程:

C语言main函数返回值详解_第5张图片 程序执行时

 被调用程序执行完后,返回调用程序的显示结果:

C语言main函数返回值详解_第6张图片 程序执行结束显示结果

后语

 

main函数的返回值是个比较重要的环节,最好养成一个好习惯。

在很多新手里最多使用的是:“return 0” 不管程序是执行正确还是错误,统统都是:“return 0”,比较不好的习惯。

实际上可以自定义返回值,根据不同情况返回不同值,方便程序执行过程中就可以得知程序是那个环节出现问题等。

而程序最好使用 int main(int argc,char *argv[]) 来定义自己的程序入口,让参数来完成相应的功能,而不是打开程序就执行程序全部功能,方便以后调用自己的程序。

你可能感兴趣的:(C/C++,应用)