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

Can a main() return before all cout has been written to the consol?

本文关键字:是否 返回 main cout 写入 之前 consol      更新时间:2023-10-16

我尝试在调用C++程序的R脚本中跟踪错误。R告诉我,我的C++返回了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脚本是这样做的事情:

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

难道 R 没有从程序获得 cout 输出吗?此问题与相应的 R 问题相关:DEOptim一直在讲述:目标函数的NaN值

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

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

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

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