簡體   English   中英

為什么盡管在此行之前調用了另一個 function,但 function 的下一行仍然執行?

[英]Why does the next line of a function still execute despite calling another function before such line?

這是一個明顯的示例代碼:

int foo();
void bar();

bool flag = false;

int foo()
{
    if(!flag) bar();
    cout<<"Reached Here!"<<endl;
    return 0;
}

void bar()
{
    flag = true;
    foo();
}

在這段代碼中, cout<<"Reached Here;"<<endl; 執行兩次。 但是,逐步模擬它並不同意這一點。 根據我的預期,它應該像這樣 go :

  1. 由於!flag為真,調用bar()
  2. 從 function bar() ,設置flag = true
  3. 然后,調用foo()
  4. 因為!flag現在是假的,我們就繼續下一行
  5. Output Reached Here控制台
  6. 程序結束

如您所見,我期待cout<<"Reached Here;"<<endl; 只執行一次。 那么,為什么它會被執行兩次,我怎樣才能避免這種情況(除了用else括住下一行)?

編輯:將foo()更改為bar()並將main()更改為foo()

從函數返回時,從 function 調用之后的行繼續執行。 這就是回報的意思。

因此,實際的跟蹤是:

  1. (第一次調用) foo()調用bar() ,看到flag = false
  2. bar()設置flag = true
  3. bar()調用 (2nd) foo()
  4. (第二次調用) foo()跳過bar() ,看到flag = true
  5. (第二次調用) foo()打印“到達這里!”
  6. (第二次調用) foo()將零返回到bar()
  7. bar()返回
  8. (第一次調用) foo()打印“到達這里!”
  9. (第一次調用) foo()將零返回給它的調用者

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM