📜  C C ++中的退出代码(带示例)(1)

📅  最后修改于: 2023-12-03 15:13:44.207000             🧑  作者: Mango

C/C++中的退出代码

在C/C++程序中,当程序运行完成后会返回一个退出代码。这个退出代码可以用来表示程序的状态或告诉系统运行的结果。一般情况下,返回0表示程序成功执行,其他数字表示不同的错误或结果。

返回值为0的情况

当程序执行成功时,一般返回0值。

#include <stdio.h>

int main()
{
    printf("Hello, World!");
    return 0;
}
#include <iostream>

int main()
{
    std::cout << "Hello, World!";
    return 0;
}
返回值不为0的情况

当程序执行不成功或出现错误时,需要返回非0值。

#include <stdio.h>

int main()
{
    FILE* fptr = NULL;
    fptr = fopen("file.txt", "r");
    
    if ( fptr == NULL )
    {
        printf("Failed to open file\n");
        return 1;
    }
    
    fclose(fptr);
    return 0;
}
#include <iostream>
#include <fstream>

int main()
{
    std::ifstream file("file.txt");
    
    if ( !file.is_open() )
    {
        std::cout << "Failed to open file\n";
        return 1;
    }
    
    file.close();
    return 0;
}
特殊的退出代码

在C/C++中,有些退出代码具有特殊的含义。

  • SIGINT (2):程序因为接收到SIGINT信号而终止。该信号通常由用户在命令行界面上按下Ctrl+C组合键触发。
  • SIGSEGV (11):程序因为尝试访问未分配的内存或者越界访问内存而崩溃。
  • SIGABRT (6):程序因为调用了abort()函数而终止。
  • SIGFPE (8):程序因为试图执行错误的算术操作而终止。
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>

void sig_handler(int sig)
{
    printf("Caught signal %d\n", sig);
    exit(sig);
}

int main()
{
    signal(SIGINT, sig_handler);
    signal(SIGSEGV, sig_handler);
    signal(SIGABRT, sig_handler);
    signal(SIGFPE, sig_handler);
    
    int num = 10 / 0;
    printf("The result is %d\n", num);

    return 0;
}
#include <iostream>
#include <csignal>

void sig_handler(int sig)
{
    std::cout << "Caught signal " << sig << "\n";
    exit(sig);
}

int main()
{
    std::signal(SIGINT, sig_handler);
    std::signal(SIGSEGV, sig_handler);
    std::signal(SIGABRT, sig_handler);
    std::signal(SIGFPE, sig_handler);
    
    int num = 10 / 0;
    std::cout << "The result is " << num << "\n";
    
    return 0;
}

以上是C/C++中的退出代码的介绍。在程序开发中,正确使用退出代码可以更好的表达程序执行的状态和结果,方便程序员对程序的修复和优化。