我想在前面的文章裡很多人可能都沒遇過所謂的鬼打牆,大學四年中我遇到最多鬼打牆的狀況全是Dev C++引起的,其實如果都一一記下來應該是個很長的列表,只是問題解決通常我自己也忘記了,其中一個我印相最深刻的鬼打牆問題不是由Dev C++引起的,而是Visual C++ 6.0引起的,程式碼大略像這樣
class SocketHandler {
// 此函數會被呼叫以通知連線成功
void onConnectionSuccess();
};
void SocketHandler::onConnectionSuccess() {
// some code here
}
這是我自己寫的一個socket連線程式,不管怎麼試,編譯器總會跟我抱怨它不認識onConnectionSuccess這個函數,從表面上看起來程式也沒有任何問題,所以問題到底出在哪裡? 答案是許功蓋問題,看到了嗎? 註解的最後一個字是”功”,而我們知道”功”在 big5 其中最後一個字元是 “/”,且VC6不懂得unicode,它會以ASCII的方式來處理程式碼,所以程式碼就變成
// 此函數會被呼叫以通知連線成
void onConnectionSuccess();
如此一來,註解就被延伸到了下一行,onConnectionSuccess的宣告就因為這樣被忽視掉了,為了找到這個問題,我重讀了好多次程式碼,都找不到任何缺陷,一整天的時間就花在這個上面
這個故事告訴我們什麼?
從此之後我就強迫自己改用英文寫註解,我想沒有多少人有機會遇到這問題,而誰也想不到註解也會造成程式的編譯問題,這個故事告訴我們,工具的好壞遠比你想像重要,不要以為這種缺陷沒什麼,事實上是那些缺陷可以讓你debug一整天都找不到原因,除了你的工作時間浪費了,學習的時間更是浪費在其中,更慘的是還帶來了嚴重的挫折感,再一次,工欲善其事,必先利其器,學習更是如此
用英文寫註解很好, 中文其實如果用 UTF8 做編碼, 就不會到這一類問題, 因為 UTF8 有避開一些 ASCII 碼. 最慘的是我遇到一位, 他用的編輯器不知援 UTF8 只支援 Big5, 然後這位程式設計師的生產力還算是很不錯的…
我個人也是用英文註解的
沒有特別原因,單純是懶得切換成中文
沒想到竟然還有這樣的編譯器問題存在XD
本人同样因为懒得切换IME而使用英文注解……我是不是应该庆幸大陆这边的编码没有像BIG5一样有那么严重的缺陷XD
其實在行末加一個標點符號 “.” 或是 “,” 就可以避掉這個問題了.
不必硬是用英文寫註解.
不過話說回來, 順道練英文也不錯啦 ^_^
These are genuinely wonderful ideas in concerning blogging.
You have touched some pleasant points here.
Any way keep up wrinting.
Visit my page – info garcinia cambogia premium