C語言中既然可以呼叫函式,為什麼還要發明go to語法呢?

時間 2021-12-29 19:32:16

1樓:雨花

保持跟彙編相容

上古時候一次額外的函式呼叫有很大的效能開銷,我記得很小的時候讀的書裡面還說要盡量合併函式體,節省函式呼叫開銷,不過也不確定他是不是胡說,早年國內計算機技術真不咋地。

現在一般都是反過來,能拆成函式的都拆成函式。

2樓:陳寧聰

C語言沒有CPS,有了CPS你就可以不要goto了(笑)。

嚴肅地說,乙個原因是因為結構控制流(if,while+函式呼叫)沒辦法覆蓋所有的控制流結構,根據Folk定理,用結構控制流寫出的程式,對應的CFG(control flow graph)都是可約的(reducible),然而世界上還有non-reducible的圖,雖然情況很少就是了,這個時候你要弄乙個goto語句。

3樓:舞冰刀

goto語句現在備受詬病,慎用;而且好像goto語句沒有函式好用,下面是參考文章

C語言中呼叫函式change data 和data change data 有什麼區別?

眼鏡獒 change data 或者data change data 哪有data change data 這種又傳位址又返回修改過後的值的?傳了位址就可以直接修改值,為什麼要有個多餘的返回值?有了返回值就可以在外面接收,為什麼又要傳乙個多餘的位址? 差乙個賦值操作。assume data is 1...

在C語言中,函式呼叫前是否必須先宣告?

大江 我的理解是,所呼叫函式可能的返回值型別不同占用的記憶體空間大小不一樣的,而返回值是需要放在臨時空間裡的,所以你需要告訴編譯器需要多少的記憶體空間,比如int需要4位元組,double需要8位元組,如果不寫,編譯器假定留出最通用的4位元組給臨時變數。當然這跟規範和標準以及編譯器的實現有關。如果以...

c語言是否可以通過呼叫void函式來完成對陣列的賦值?

zr scat 變長陣列啊,c99範疇,vc沒戲,並且陣列在函式引數會退化為指標 如果陣列引數退化成指標,則不知道步長,不行,可以強行傳入步長來搞定 如果只是想初始化為0的話,直接 不必如此麻煩 雲天明 double z不完了麼 void zeros int width,int height,dou...