在所有cout写入consol之前,main()可以返回吗?

时间:2016-03-01 19:01:29

标签: c++ r execution-time

我尝试在调用C ++程序的R脚本中追踪错误。 R告诉我,我的C ++返回了NA - 但是当我浏览程序时,情况似乎并非如此。没有什么叫做会导致R中的NA。因此我的问题是,如果R可能永远不会捕获C ++程序的输出,因为在将所有输出写入控制台之前调用return 0

我的程序会将一些数字写入控制台。每行一个数字,最后一行以endl结尾。

main()
{
cout<<33.12<<"\n"; //print a couple of number to cout
cout<<9711.3<<"\n"<<5699.14<<endl;
return 0;
}

我的R-Script做这样的事情:

x <- as.numeric(system("./myProgram", intern=T))
if(any(is.na(x))) {
    stop("Wooppp, x is NA: ", x)
}

可以吗,R没有得到程序的cout输出? 这个问题与相应的R问题有关: DEOptim keeps telling: NaN value of objective function

1 个答案:

答案 0 :(得分:0)

通常,是的,在main()结束之前,部分输出可能尚未刷新。但是,到程序结束时,无论如何都应该刷新所有内容。

更多细节,main只是一个函数,对于程序员来说这是程序的入口点,但实际上运行时会在此调用之前/之后执行某些部分。这包括加载共享对象,调用全局变量的析构函数以及其他一些你不了解常规程序员的东西。

由于std :: cout是一个全局对象,它将使用它的析构函数来刷新正确的数据。虽然大多数实现都在&#34; \ n&#34;字符(不要认为它是必需的),std :: endl和std :: flush(我认为这是必需的),无论如何这个例子应该没​​问题。

我会尝试拆分这个问题,并尝试将C ++程序的输出推送到文件后再读取它(都来自同一个R程序),尝试控制台输入......