-2

我有以下...

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*/
}       

现在,上述工作。也就是说,我可以在子程序完成后看到“子程序之后”。

但是,如果我注释掉该行

cout<<"Into subroutine"<<endl;

在 中subroutine(),子程序似乎根本没有运行。我根本看不到“子程序之后”。

这似乎是一个错误。这是一个有任何解决方案的已知问题吗?

4

2 回答 2

7

你有未定义的行为。该函数必须返回一个 int:

int subroutine(){
  cout<<"Into subroutine"<<endl;
  return 42;
}

另外,请确保它在之前声明main()

int subroutine(); // declaration

int main()
{
  ...
}

int subroutine() { .... } // definition as before. But without bugs.
于 2013-07-09T08:38:58.993 回答
1

该子例程可能会被编译器优化掉,因为它没有任何效果。

然而,这并不能解释为什么

cout<<"After subroutine"<<endl;

不被执行。您确定吗?尝试在子例程和“子例程之后”行中都放置断点。

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

于 2013-07-09T08:52:07.623 回答