伟大的C ++程序员,
我多次遇到这种情况,但我仍然不知道如何解决它。
我在Rstudio中用C ++编程,我的程序遇到致命错误,需要我重新启动。我想找到我的代码中的错误所在。我经常做的是添加一些检测线,如:
int main()
{
...code block;
std::cout<<"1.1\n";
...code block;
std::cout<<"1.2\n";
...code block;
std::cout<<"1.3\n";
...code block;
std::cout<<"1.4\n";
return 1;
}
然后我运行代码。
奇怪的是,在它遇到“致命错误”之前,有时我在控制台上打印“1.1”,有时我得到“1.1”和“1.2”,有时我得到“1.1”,“1.2”和“1.3,有时我一无所获。
我想它与操作系统有关,因为它是操作系统获得打印需要一些时间的命令,但同时CPU正在执行代码并遇到致命错误。
或者,编译代码的方式可能会导致这样的事情发生?
无论如何要解决它?我只是希望程序在遇到“致命错误”之前打印出我要求的所有内容。
谢谢!
编译器优化可能会重新排序代码,使打印输出不可靠。您在R环境中编写C ++编程,默认的g ++编译器优化设置为-O2。转到R目录,搜索名为“Makeconf”的文件。使用文本编辑器打开它,找到命令“CXX11FLAGS = -O2 ...”,擦除“-O2”,保存文件并重建程序。其他命令如“CXXFLAGS = -O2 ...”也可能需要修改。到那时,代码将严格按顺序运行。
答案 0 :(得分:2)
您使用的是std::cout
不 R使用的内容,您会遇到两种不同的缓冲方案。
简易解决方案:使用Rcpp::Rcout
代替重定向到R的输出流。