目前日期文章:201011 (6)

瀏覽方式: 標題列表 簡短摘要

對最近一則熱門新聞的看法,無關政治。

novus 發表在 痞客邦 PIXNET 留言(1) 人氣()

前幾篇我介紹了一種不用 __VA_ARGS__ 實作可變參數 macro 的方式,例如可以這樣寫

PRINTF("%d %f %s", (1)(3.14)("hello"));

novus 發表在 痞客邦 PIXNET 留言(0) 人氣()

在程式撰寫過程中,有時候我們會希望輸出一些內部的資訊,例如某某變數值是多少、有沒有進入某某函式等等,讓 debug 有線索可循。很多人的做法是直接在程式碼當中插入 printf 或 cout,到正式 build 的時候再手動將這些資訊移除,這種做法只適用於小規模的程式,並且在 GUI 程式比較難用。比較巧妙一點的做法是將相關的功能用 macro 包裝,靠 NDEBUG 或類似的 flag 來決定是否輸出這些除錯資訊。我記得 VB6 有個類似的功能叫做 Debug.Print,正式建置程式的時候這些指令將會被編譯器忽略。

以前我的做法是把一些常用的 debug 和 assertion 功能用 macro 包裝好塞在一個標頭檔裡面,依照現實需求略做修改,通常這樣就已經很夠用了,所以未曾在此多留心。後來我在《Applied C++: Practical Techniques for Building Better Software》讀到了一種複雜許多的 debug output 方法,才知道原來小題也可以大作到這種地步。複雜帶來的是功能上的彈性,例如在書中介紹的機制只要切換一個叫做「Debug Sink」的組件,就可以將蒐集到的資訊全部倒到 console、檔案、訊息視窗甚至是網路。不過這些額外的好處還不夠吸引我,所以我還是繼續使用自製的 macro 工具。

novus 發表在 痞客邦 PIXNET 留言(1) 人氣()

最近 survey 了一些 debug sink 實作,其中最原始的應該是 dprintf。用函數實作的dprintf有一些缺點,例如 releas build 時編譯器仍然無法去除額外的函式呼叫。另一方面我們希望能夠自動收集 __FILE__、__LINE__ 的資訊,節省機械化的打字。

要解決這個問題其實很簡單,這裡提供一種做法

novus 發表在 痞客邦 PIXNET 留言(0) 人氣()

上個星期我以每天三至四篇的速度看完了《什麼是中醫,這才是西醫》這部網路著作,通常我會在睡前看一些比較五四三的東西,而這部著作常常讓我看著想著忘了要睡覺。 作者好像是中西雙修的中醫系學生,對他想探討的主題有足夠的知識作為支援,而且文筆生動,不會落入僵硬的說教。我不太確定這本書是否真的「完了」,或者將來會不會出版成實體書。

這本書告訴你中醫怎麼來的,並且以西醫的發展作為對照,最後提出一些對中、西醫未來發展的建議。在網路上有很多關於中西醫的論戰,大部分的內容都相當偏激,而且說句老實話.....嗯.....我覺得支持中醫一方除了嘴砲和文字遊戲之外,鮮少提出什麼有說服力的論點。我自認算是一個相信中醫有其存在價值的人,如果連我都看不下去,那麼反對中醫的人大概更加無法接受。

novus 發表在 痞客邦 PIXNET 留言(3) 人氣()

在前一篇中我介紹了托里切利的 Vuvuzela,不過其中有個無限延伸的 x 軸讓人難以接受,並且要用到稍微麻煩的微積分計算。

在這篇我想補充一個有點類似的問題,改自於數學家 Helge von Koch 提出的 Koch 雪花曲線。一開始我們有一個正三角形,然後我們把各邊中央取三分之一再長出小三角形,成為六角星形。這個步驟可以繼續持續下去,直到無限。

novus 發表在 痞客邦 PIXNET 留言(2) 人氣()