你沒遇過的編譯器鬼打牆,許功蓋問題

标签: 中文文章 C/C++ | 发表时间:2011-07-08 12:33 | 作者:victor mrluanma
出处:http://blog.ez2learn.com

我想在前面的文章裡很多人可能都沒遇過所謂的鬼打牆,大學四年中我遇到最多鬼打牆的狀況全是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一整天都找不到原因,除了你的工作時間浪費了,學習的時間更是浪費在其中,更慘的是還帶來了嚴重的挫折感,再一次,工欲善其事,必先利其器,學習更是如此

相关 [中文文章 C/C++ ] 推荐:

你沒遇過的編譯器鬼打牆,許功蓋問題

- mrluanma - 程式設計 遇上 小提琴
我想在前面的文章裡很多人可能都沒遇過所謂的鬼打牆,大學四年中我遇到最多鬼打牆的狀況全是Dev C++引起的,其實如果都一一記下來應該是個很長的列表,只是問題解決通常我自己也忘記了,其中一個我印相最深刻的鬼打牆問題不是由Dev C++引起的,而是Visual C++ 6.0引起的,程式碼大略像這樣. // 此函數會被呼叫以通知連線成功.

我的open source專案整理列表

- Charles - 程式設計 遇上 小提琴
HGE以前是一款商用的2D遊戲引擎,後來開源,因為我覺得他的引擎挺簡單好用的,重點是有硬體加速,不像SDL純軟體算圖很慢,所以想說把它移植到Python,於是就用Boost.Python寫了一個專案,完成度大約7~8成,裡面有些比較難處理的部份還沒弄好,但主要功能大多都已經可以使用. Glottony是一個用來分析Python函式庫在PyPi上的相依情況,主要是有一次我安裝TurboGears時遇到其中一個package的伺服器似乎掛掉了,整個進度就因為那個檔案載不了而無法進行,因此我覺得或許這種相依的情況也是選工具時重要的考量,於是就寫了這樣的工具.

那些台灣軟體產業所缺少的 – 版本控制系統

- chitsaou - 程式設計 遇上 小提琴
這幾年來,多多少少接觸了不少業界的人,雖然我自己還不算有真正待過業界太久,但是這期間看到不少業界的現象都令我挺驚訝的,例如在聊天時提到你們公司用的版本控制系統是什麼,有很多人都會回答 「那是什麼?」,一直以來這些在國外的主流開發環境都基本常識或是標準配備的東西台灣業界居然很多都連有那樣的工具存在都不知道,或著是對於某些東西有錯誤的認知,所以我想大略提一下常見的幾個問題.

無用 – 更改Linux SSH登入歡迎畫面為新世紀福音戰士裡的Nerv的logo

- CMGS - 程式設計 遇上 小提琴
不要問我這有什麼用,只是純好玩,如果你的ssh沒有用utf8編碼的話可能會看到亂碼,以下是看起來的效果. 做法很簡單,修改/etc/motd檔即可,如果你想要這個Nerv logo,可以下載這個motd.txt然後解開後覆蓋原本的motd即可. Logo作者為ptt的cfi697,而原始版本因為字型寬度的問題我修正了一下.

無停機服務遷移

- lostsnow - 程式設計 遇上 小提琴
一直以來在營運now.in都有一個令人困擾的問題,就是每當伺服器更新或是出現問題時,就得關掉重開,雖然說大部份的伺服器我在設計上都做成重開也沒有關係,但有少部份一但重啟就會造成使用者斷線,參考下面這張伺服器狀態的圖. 圖中被切斷的山峰都是伺服器重啟的時候,無疑的這對使用者來說是不好的體驗,對於一般網頁HTTP這類stateless的伺服器來說重啟是無所謂,但串流伺服器就不一樣,因此最近我在思考如何解決這樣的問題,首先想到的是伺服器重開的原因,不外乎有幾種.

淺談區域性 (locality)

- chuang - 程式設計 遇上 小提琴
在設計不同的網路服務系統時,為了能夠有擴展性,通常都會設計成分散式的架構,然而除了架構上的設計,如何部署也是很重要的事,其中有個很重要的議題叫做區域性,因為沒有統一或明確的翻譯慣例,所以以英文來說明較為精確,在這裡指的區域性英文為locality,對於這個議題最近有一點心得. 所以,回到主題,到底什麼是區域性.

那些台灣軟體產業所缺少的 – 開放源始碼

- votis - 程式設計 遇上 小提琴
前面幾篇談到了台灣軟體產業界常見的毛病,除了工具以外,還有一項令我感到相當意外的,就是我發現台灣業界對於開放源始碼的認知真的很有問題,例如我曾有和別人討論過,跟他們你們可以使用open source的現成資源來減低成本,但是得到的回應很常是. 那不是讓你用但之後就要付錢嗎?. 從這類的回應就可以大略知道,其實有很多人對於開放源始碼都有一些錯誤的認知,到底什麼時候該付錢、什麼情況可以使用都搞不清楚,因此這回我大算介紹一下一些常見的開源授權的常識.

微软招聘C/C#/C++人才开发Windows Phone 8

- 洞箫 - cnBeta.COM
微软今天在其网站招聘栏目上贴出了有关Windows Phone 8的开发人员需求信息,要求能够独立工作的5年以上开发经验的C/C#/C++人才,主要用于开发WP8系统的内核,预计该系统发布最早也要到2012年下半年. 目前Windows Phone 7.5已经在七月份完成开发并即将在9月份发布.

介绍一个 C/C++ 、C#、JAVA 代码美化工具

- king - 博客园-首页原创精华区
给大伙介绍一个开源工具 AStyle,支持C/C++、C#、JAVA等语言,按照不同的风格格式化代码,也可以称为美化代码. 用这个工具美化出来的代码与我自已的风格几乎一样,我很喜欢这个小工具,也可以很方便的集成到VS里面去. --style=ansi ansi C风格代码 我个人喜欢用这个风格. --indent=spaces=4 缩进用4个空格.

C、C++时间与日期函数

- lyxint - 1+1=2
由于自己实际工作学习中没怎么用时间和日期的函数,在看Unix环境高级编程6.10节和Python的time模块时,总感觉这些东西总是连不成串. 翻翻C标准(C++中的东西我看不懂),相关的也就是time.h这个东西了. 暂时抛开和clock相关的东西. 只看字面上和time直接相关的东西. 该函数返回从某个时间点(epoch)到现在为止所经过的秒数.