我有以下......
int main(){
cout<<"Before subroutine"<<endl;
int returnvalue = subroutine();
cout<<"After subroutine"<<endl;
}
int subroutine(){
cout<<"Into subroutine"<<endl;
/*subroutine does its work
subroutine finishes its work*/
}
现在,上面的工作。也就是说,我可以在子程序完成后看到“After subroutine”。
但是,如果我注释掉该行
cout<<"Into subroutine"<<endl;
在subroutine()
中,子程序似乎没有运行。我根本没有看到“After subroutine”。
这似乎是一个错误。这是一个有问题的已知问题吗?
答案 0 :(得分:7)
您有未定义的行为。函数必须返回一个int:
int subroutine(){
cout<<"Into subroutine"<<endl;
return 42;
}
另外,请确保在main()
:
int subroutine(); // declaration
int main()
{
...
}
int subroutine() { .... } // definition as before. But without bugs.
答案 1 :(得分:1)
编译器可能会优化子程序,因为它没有任何效果。
然而,这并没有解释为什么
cout<<"After subroutine"<<endl;
未执行。你确定吗?尝试将断点放入子例程和“子例程后”行。
当然,绝对需要返回子程序。