如何在C++中使用错误控制函数?
How to use of error control functions in C++?
我的源代码如下:
#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();
}
我想为 "divide to zero" 显示我的 error
字符串!
但输出是:
salam
no such file or directory
请帮助我如何在 C++ 中使用 errno
和 errorstring
?
不幸的是,整数除以零在 C++ 中是未定义的行为。所以运行时可以做任何事情。你已经失去了对程序的控制,所以没有什么可以帮助你。
最好的办法是先检查分母并明确处理零的情况:程序失败时返回非零是惯用的。
除以零就是 Undefined Behaviour。该语言希望您不要编写那样无意义的代码(如果您这样做,就会鄙视您)。从本质上讲,它会使您的整个程序变得毫无意义,并且任何事情都可能发生。如果有任何可能为零,您需要在除法之前检查分母。
C和C++中存在未定义行为的主要原因是效率。硬件不想检查这种没有数学意义的特殊情况,语言也不希望每次调用都添加检查。这些语言旨在 运行 在 "good" 情况下非常快。
errno
仅在使用标准库(和系统调用)时针对某些错误设置。例如:
double not_a_number = std::log(-1.0);
std::cerr << std::strerror(errno) << '\n';
我的源代码如下:
#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();
}
我想为 "divide to zero" 显示我的 error
字符串!
但输出是:
salam
no such file or directory
请帮助我如何在 C++ 中使用 errno
和 errorstring
?
不幸的是,整数除以零在 C++ 中是未定义的行为。所以运行时可以做任何事情。你已经失去了对程序的控制,所以没有什么可以帮助你。
最好的办法是先检查分母并明确处理零的情况:程序失败时返回非零是惯用的。
除以零就是 Undefined Behaviour。该语言希望您不要编写那样无意义的代码(如果您这样做,就会鄙视您)。从本质上讲,它会使您的整个程序变得毫无意义,并且任何事情都可能发生。如果有任何可能为零,您需要在除法之前检查分母。
C和C++中存在未定义行为的主要原因是效率。硬件不想检查这种没有数学意义的特殊情况,语言也不希望每次调用都添加检查。这些语言旨在 运行 在 "good" 情况下非常快。
errno
仅在使用标准库(和系统调用)时针对某些错误设置。例如:
double not_a_number = std::log(-1.0);
std::cerr << std::strerror(errno) << '\n';