忍……

• 本文约 584 字,阅读大致需要 2 分钟 | Life

前几天clive大长辈发了杨维中的《新同事》给我,Jeff Huang的歌词摘录如左:

喔耶,爆炸吧~爆炸吧!

愛用 .lib嘛… 爆炸吧!
愛亂用global variable嘛… 爆炸吧!
愛亂call function嘛… 爆炸吧!
愛copy & paste嘛… 爆炸吧!

喔耶,我聽到windiff了,爆炸吧!爆炸吧~~~

(在VC6裡,做 .lib時,是不會檢查dependency的。也就是說,如果你呼叫了另外一個 .lib的function,只有compiler會檢查該function有否宣告過,linker不會檢查該symbol是否存在。因此,如果include path有設,header也有 #include,就不會顯示任何錯誤。必須要等到用該 .lib的人,在做 .exe或 .dll時,才會產生missing symbol的錯誤。

另外,.lib相當於是把所有function都赤裸裸地開放出來,這樣就沒有所謂的「模組介面」,因此很容易就會亂呼叫function,而沒有注意到,呼叫了不應有相依關係的component裡的函式。又由於前述不會有missing symbol錯誤的關係,而無法察覺這樣的錯誤,因而導致最終程式的dependency關係會一團亂。

亂call function,除了上面「呼叫了不應有相依關係的component裡的函式」的狀況之外,還包含了「喜歡自行在 .c/.cpp檔前面,重複宣告函式,而不是用 #include將對應的header引入」。這會造成當所依存的component更新,prototype改變時,會無法於compile-time察覺,若僅prototype改變,function name不變的話,甚至連link-time也不會產生error,假使test-time還是無法測到這個問題,那就等著在客戶那邊爆炸。)

当时觉得很好玩。现在我也想跟着唱,爆炸吧,爆炸吧……虽然不是同一件事XD