回覆列表
  • 1 # 曲終乆散14827337

    程式生成需要兩個步驟:編譯和連結。函式宣告未定義可以透過編譯,但是在連結時會失敗。舉個例子:張三和李四計劃週末去爬山,那麼爬山這個過程就是程式執行。張三說他開車,李四說他買票,到底張三有沒有車和李四有沒有錢買票先不管,這個爬山的可行性是存在的,所以編譯透過。然後張三車壞了或者李四錢包丟了導致任何一個編譯的預先假定可以完成的條件被破壞,那麼連結失敗這倆人就不能爬山了。如果張三既可以自己開車也可以去叫滴滴,那麼爬山照樣可以完成,這就是同時定義了兩個函式但是隻呼叫了一個。總的來說,函式宣告可以編譯透過,但是在連結時要找到函式的完整程式碼定義才能生成目標程式。因此,函式宣告未定義能生成完整的可執行程式,但是不會生成obj,函式宣告定義但未使用也能生成可執行程式,但是會生成函式程式碼的obj

  • 2 # lehoon

    這個需要分語言型別看了,

    1.解釋型的不會做任何處理,保留,因為不知道用到沒用到,再說事一邊解釋一邊執行。比如js

    2.編譯型的需要經過編譯,最佳化,連結過程,靜態型別的比如c的話,能識別哪些沒用到的函式,直接release的時候去掉了,為了減少最終程式的體積。debug模式可能會保留。具體也要看每家編譯器具體怎麼實現了。

    3.編譯型的但是支援反射語法的編譯器就做不到了,因為不知道用沒用,所以一概保留。比如c#,java。

  • 中秋節和大豐收的關聯?
  • 思想傳統是怎樣的?怎樣和三觀不同又不認同你三觀的人相處?