【问题标题】:How to use of error control functions in C++?如何在 C++ 中使用错误控制函数?
【发布时间】:2015-03-05 11:48:33
【问题描述】:

我的源代码如下:

#include <QtCore/QCoreApplication>
#include <stdio.h>
#include <errno.h>



using namespace std;
int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    printf("salam\n");
    int num = 10;
    int ss;
    ss = num / 0;
    printf("%s\n",strerror(errno));

    return a.exec();

}

我想显示我的error 字符串“除零”! 但输出是:

salam没有这样的文件或目录

请帮我在c++中如何使用errno和errorstring?

【问题讨论】:

    标签: c++ strerror


    【解决方案1】:

    除以零就是Undefined Behaviour。该语言希望您不要编写那样无意义的代码(如果您这样做,就会鄙视您)。从本质上讲,它使您的整个程序变得毫无意义,并且任何事情都可能发生。如果有可能为零,您需要在除法之前检查分母。

    C 和 C++ 中存在未定义行为的主要原因是效率。硬件不想检查这种没有数学意义的特殊情况,语言也不想在每次调用中都添加检查。这些语言旨在在“好”情况下运行得非常快。

    errno 仅在使用标准库(和系统调用)时针对某些错误设置。例如:

    double not_a_number = std::log(-1.0);
    std::cerr << std::strerror(errno) << '\n';
    

    【讨论】:

      【解决方案2】:

      不幸的是,除以零是 C++ 中的未定义行为。所以运行时可以做任何事情。你已经失去了对程序的控制,所以没有什么可以帮助你。

      最好的办法是首先检查分母并明确处理零的情况:程序失败返回非零是惯用的。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-10-20
        • 2015-01-30
        • 1970-01-01
        • 2017-02-22
        • 1970-01-01
        • 2016-11-29
        • 2020-02-18
        • 2019-11-14
        相关资源
        最近更新 更多