Home Contact Sitemap

Team Programming Dragon.編程龍

Programming Art、C++、Python、Django、LinuxDev、HCI、Graphics、Web2.0。讓我們成為編程界的朝田龍太郎吧。

Beauty is Our Business

A Birthday Salute to Computer Scientist Edsger W. Dijkstra.

G++ 尚未支援 extern template?

在用別人實作的 Graph Cuts 的時候,發現原來 g++(以 4.3.1 實測)似乎尚未支援 extern template:如果 function template 的定義跟宣告拆開來的話,會出現 undefined reference error。儘管按照這份 spec 應該是 OK 的。或許中間出了什麼差錯,晚點再試試。

暫時的解決方式很簡單,把所有定義丟到 header file 裡面去就行了。

Tags: ,

. 30 Nov 08 | C++ | Comments (8)

Conditional Break in GDB

在 gdb 之中,要作 conditional break,首先,我們可能會先查一下現在有哪幾個 breakpoint 在作用中:

$ info br

假設我們要設的是第二個 break point,在某變數 x 大於 3 時停下,就這樣下指令:

$ cond 2 x > 3

如果要改設別的 condition,可以這樣下取消

$ cond 2

或者直接改設別的條件也可以

$ cond 2 y == 77

附帶一提,continue (cont) 也滿好用的。在 for-loop 之中常常會想要一次跳個 100, 1000 個 iteration 之類的。那可以這樣下:

cont 1000

下次再按 enter 會重複上一個指令,於是就會以 1000 個 iteration 為單位作 break。

我很久沒用 VC,不過可以想見這在 VC 之中應該是選單拉來拉去才能完成。gdb 的學習曲線較陡一些,但上手之後會不少人都會喜歡上這簡潔明快的節奏感。其實 gvim 啦、gcc 等等也是如此,算是 opensource 工具很常見的一個共通點。

Tags: ,

. 30 Nov 08 | C++, Linux | Comments (0)

半瓶醋的 C++ 教學(第六章):開源流萬世一系不敗經典 Hello World 實作

基本上到目前為止好像都在閒聊(汗),還是讓我們進入實際操作吧,在這邊我們寫一支編程界的經典 Hello World 出來。

Hello World 本質上是一支連玩具都稱不上的程式,但透過寫作,她可以讓我們了解編程的最基本流程,並確認環境設定無誤。我記得自己剛開始編程的時候對環境的設定反而比較苦手,不知道什麼部分該用什麼,不然就是知道該用什麼卻必須一直辜狗;相較之下,語法的部分一開始超簡單,看看書沒兩下就懂了,所以在這邊,如同第零章所述,我想補的是一般書籍的不足,語法部分就請大家在第一章的推薦書籍之中自修一下。

首先在第四章我們提過了編程環境的選擇,當中我推薦用開源環境來編程,所以在這邊我介紹的是開源流的編程方式,M$ 流的也不難,基本上就是想辦法搞到一片 VC(到底有多少人用正版的?科科),打上 Hello World 再按某個鈕就好了,非常簡單,兩者的差異大致上就像自排車手排車一樣。自排車好開,但要充份享受駕馭極速機器的快感唯有手排,沒有人開藍寶基尼在開自排的吧?

OK,咱們開始吧。

Tags: , , , , , , ,

. 14 Oct 08 | C++ | Comments (0)

cout 與 printf 效率比較

平常寫 research code 比較沒什麼感覺。最近無聊寫起 UVa Online Judge 就對效能比較在意一點。

今天才知道原來 printf 比 cout 快、scanf 比 cin 快、\n 比 endl 快。

有興趣可以自己 print 一堆 hello world 出來試看看。我測的結果大致上是十比九左右。

Tags: , ,

. 10 Sep 08 | C++ | Comments (2)

C++ 底下 string 與 int 的互轉

string 要轉 int 相對簡單,用 atoi 即可:

#include <cstdlib>
using namespace std;
atoi(input_string.c_str());

但 int 要轉 string 就麻煩一點,雖然 itoa 這個 non-standard function 也不算太不常見,但不在標準裡面,最起碼 gcc 就沒支援。標準的作法應該是用 stringstream:

#include <iostream>
#include <stringstream>
using namespace std;

stringstream ss;
ss << input_number;
cout << ss.str() << endl;

三個問題:首先、atoi 本身名稱有點醜。第二、有 atoi 卻沒有 itoa 是很莫名的不對稱性。第三、用到 stringstream 增加不必要的複雜度。有時候不得不承認 C++ 語法是太過駁雜不純了一點。string int 互轉又很常用…

p.s “>”, “<” 在 code snippet 當中會爛掉,爬了一下 google 暫時沒找到 solution,有空再回來修。若有其他 code display plugin on wordpress 也網友們推薦,找很久了。= =

Tags: , , ,

. 10 Sep 08 | C++ | Comments (5)

半瓶醋的 C++ 教學(第五章):編程語言的軍團論

編程界裡面有許多爭論不休的話題。語言之爭是最主要之一。就像宗教有各種流派一樣,信或不信有時只是個人價值觀,這種爭論說起來就跟宗教戰爭沒什麼兩樣。

我自己的看法是這樣,就像一個專業的投手需要配球一樣,一個專業的 programmer 也至少需要兩種以上用起來順手的語言。用軍隊來比喻或許更為恰當。一支現代化的軍隊不可能只有步兵,也不可能只有重裝甲部隊。根據戰略戰術需求的不同,在兵種之間取得適當的平衡,才能讓戰力達到最大化。但兵種之間,比方說,戰機到底要裝備蘇系的 SU-27 還是美系的 F-22 就看各人喜好了。只要記得在這個講究制空權的時代,買戰艦的時候別去買到過時的巨大戰列艦大和號就好。

Tags: , ,

. 31 Aug 08 | C++ | Comments (2)

半瓶醋的 C++ 教學(第四章):編程環境的選擇

之前在第三章曾經提到,越接近數學的內力不容易隨時間而改變,但作為外功的程式或系統工具則會,那麼,我們該如何儘量讓自己的外功能夠歷久恒新呢?

很直覺的,當然就是選用較不會過時的工具。而工具要能夠在變化萬千的編程界中不被時間所淘汰,固然本身素質要好,另外,我認為最重要的其中一個環節就是,開放。雖然這應該很直覺,不過還是稍加解釋一下好了…

如果今天某工具某 framework 是知名大廠所提倡的,或許在這大廠能夠予以支援的狀況下是還滿不錯用的,但是天有不測風雲啊,再怎麼大的公司總也有收攤的一天…就算沒有收攤好了,也許是公司的政策改變了,要改推另一個工具,那麼這時候無論是開發者的使用順手度,還是市場的接受度(你知道,麻瓜常常都是看哪個廣告多就用哪個,但我們巫師要有巫師的衿持),都難免急轉直下。因為他不開放,沒人搞得懂裡面在幹嘛,所以不會有社群的力量,同理,你也搞不懂,就算你再強想自己硬幹也沒辦法,除非重新寫一個。

甚至不要說收攤或是什麼行銷政策了,光講某M社的 IDE,常常出一個新的版本舊的版本的 code 就不能用了,這種愚蠢的事情我真想不透為什麼有人能夠接受…

Tags: , , , , ,

. 27 Aug 08 | C++, Linux | Comments (2)

半瓶醋的 C++ 教學(第三章):程序員的內力與外功

很多人都曾經提出過這樣的比喻:程序員的功力之中,大致上可以分為內力以及外功。

Tags: ,

. 10 Jul 08 | C++ | Comment (1)

半瓶醋的 C++ 教學(第二章):何謂編程,與其魔幻性

常有人說電腦是人類的僕人,雖然我比較傾向於像大空翼一樣稱電腦為朋友啦,不過反正就是這麼一回事。然而不管你稱他僕人還是朋友,電腦某種程度來講就是笨。你可以說他很聰明,可以在很短的時間內作出大量的計算,但他笨的地方就在於他只認得 0101001 這類的 binary code(是故又稱 machine code)。

所以為了遷就我們的朋友,我們只好也跟著用 binary code 來溝通,就像家裡如果有老人家我們常常會用台語一樣。這種用機器能夠了解的語言來溝通的過程,我們稱作「編程」(Programming)(中譯部分,編程主要是大陸系的用語,但我個人覺得「寫程式」太過白話,所以傾向用這個詞,個人偏好而已)。而用以溝通的語言則稱作「程式語言」(Programming Language)

Tags: ,

. 12 Jun 08 | C++ | Comments (0)

半瓶醋的 C++ 教學(第一章.裏):Reading List

以下是進階區。入門者可以心裡先有個底就好,等級到了再來看這些書籍。但我之所以要列就是覺得中文世界似乎還不太多人分享所謂的 recommended reading。類似國外 blogger 如 Coding HorrorRecommended Reading 或是 Joel on SoftwareBook Reviews,我覺得很值得花些時間列一下給大家參考。

Tags: ,

. 28 May 08 | C++ | Comments (5)