c++ - main() 能否在所有 cout 写入控制台之前返回?

标签 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

最佳答案

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

更多细节,main 只是一个函数,对于程序员来说这是程序的入口点,尽管实际上运行时在这个调用之前/之后做了一些部分。这包括加载共享对象、调用全局变量的析构函数以及作为普通程序员实际上不应该知道的一些其他内容。

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

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

关于c++ - main() 能否在所有 cout 写入控制台之前返回?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35731217/

相关文章:

r - 自定义缩放轴后ggplot2缺少标签

java - 如何减少 Java 中 ImageIcon 双数组的执行时间

c++ - 如何在使用QSplashScreen时显示任务栏图标

r - 根据字符乘以数据框中的单元格

r - 在R中用 'separate'(tidyr)拆分数据帧的几列

Java: "best practices"控制执行时调用哪些类构造函数的方法是什么?

c++ - 基于航拍图像的地面机器人障碍物检测

c++ - 使用 ADO 命令对象实现大容量/批量插入

c++ - 从c++中的一行字符串中提取数字