奇怪的错误 - 子程序只运行cout

时间:2013-07-09 08:33:37

标签: c++ visual-studio-2010

我有以下......

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”。

这似乎是一个错误。这是一个有问题的已知问题吗?

2 个答案:

答案 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;

未执行。你确定吗?尝试将断点放入子例程和“子例程后”行。

当然,绝对需要返回子程序。