我知道这是一个简单的问题,但我希望得到我的C ++。我想可以使用某种abort
函数。但我不认为会返回die('hello');
之类的任何文字。
答案 0 :(得分:7)
在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";
。我的语法可能略有错误,不确定。
答案 1 :(得分:2)
我不建议拨打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.");
。
答案 2 :(得分:0)
假设你需要这些等价物来进行调试...
而不是 die(),您可以调用调试器;
而不是 var_export(),您可以使用调试器检查变量内容。