我知道这是一个简单的问题,但我正在寻找我的 C++ 凹槽。abort
我想可以使用某种功能。但我认为这不会返回任何文本die('hello');
。
3 回答
C 或 C++ 中没有“打印消息,然后退出”。die
您可以很容易地为(或者panic
,我更喜欢这样称呼它)编写自己的函数,例如:
void die(const std::string& msg)
{
std::cerr << msg << std::endl;
exit(1);
}
或者,如果您想避免创建字符串的问题,在内存不足的情况下可能会失败:
void die(const char *msg)
...
(其余应与上述相同)。这里的缺点是你不能简单地连接字符串,例如die(std::string("Could not open file ") + filename);
不能使用const char *
.
执行此操作的函数var_dump
要困难得多,因为在 C++ 中没有直接的方法来实际获取任意类型的变量或数组的内容。你也许可以做这样的事情:
template<typename T>
void var_dump(const T& var)
{
std::cout << var << endl;
}
template<typename T, size_t N>
void var_dump(const T (&var)[N])
{
for(i : var)
{
std::cout << i << endl;
}
}
后者有点像这样的 PHP 代码:foreach($var as $i) echo $i . "\n";
. 而且我的语法可能有点错误,不确定。
我不建议打电话std::abort
或std::exit
类似的事情。
这是蛮力的,正确清理的语义非常复杂。你基本上把你的程序(至少部分)留在了一个非常混乱的状态。
C++ 中一个更好的方法是抛出一个异常,然后捕获main
:
#include <stdexcept>
struct fatal_error : std::logic_error {
fatal_error(char const* message) : std::logic_error(message) { }
};
int main() try {
… the normal program flow starts here
} catch (fatal_error const& e) {
std::cerr << e.what() << '\n';
return EXIT_FAILURE;
}
然后,die
您只需说. 而不是throw fatal_error("Something went wrong.");
.
假设您需要这些等价物来进行调试...
而不是die()你可以调用调试器;
您可以使用调试器检查变量内容,而不是var_export() 。