是否存在与PHP的var_dump等同的C ++?

时间:2013-10-14 20:46:08

标签: c++

我知道这是一个简单的问题,但我希望得到我的C ++。我想可以使用某种abort函数。但我不认为会返回die('hello');之类的任何文字。

3 个答案:

答案 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::abortstd::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(),您可以使用调试器检查变量内容。