我一直沒試過在多緒環境下使用 rand() 或 strtok() 這類函數,因為古有明訓,早在我對 thread 都還沒有什麼概念之前,就已經知道 rand() 或 strtok() 最初設計時對多緒環境完全盲目,所以這種用法對我來說是根本都不用考慮的愚蠢行為。另一方面是因為手邊有比 rand() 和 strtok() 更強而有力的工具,所以甚至是普通的單緒程式我都不太喜歡用 rand() 和 strtok()。

這些函數在多緒環境的問題很容易理解,例如 rand() 通常用線性同餘法實作,內部要維護一個長期存在的種子以產生下一個數。麻煩的地方在於,在多緒環境下呼叫這些函數,可能導致於同時競爭讀寫這些記憶體。同樣的問題也發生在 strtok 上。

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

C/C++ 當中有一派人士認為,當一個東西不該出現負值的時候,應盡可能以 unsigned 修飾。舉凡標準程式庫當中與記憶體大小相關的數值,像 sizeof 運算、size_t、還有STL容器的 size_type 都是某種 unsigned 整數類型;其他像 strlen 的回傳值以及 malloc 的輸入值也都具有 unsigned 性質。

除此之外,有些人更進一步主張像年齡、人數之類的,既然永遠不可能為負值,那麼也應該要加上 unsigned 關鍵字。這麼做最主要的好處之一是可以在宣告當中表明意圖,另一方面既然 unsigned 不可能為負,所以檢查有效範圍會比較簡單:

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

.

.

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

本文不打算包含:如何從頭撰寫一個 DLL、如何用某某牌編譯器編譯 DLL、如何在某某牌編譯器使用DLL..... 等等議題。基礎 DLL 教學在網路上非常豐富,有需要的人應該很容易可以得到所需資源,在此先假設讀者都有一定的熟悉度。這裡只打算提供一些能稍稍增加彈性及可維護性的小經驗,特別是 DLL 的 header 方面。或許對很多人來說可能都是常識,只是我發現網路上比較少這方面的整合資訊,所以做了一點綜合整理。

以下我拿自己常用的 DLL header 範本為例

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

會有這個程式,是因為聽一位朋友說,他光是寫井字遊戲的AI就用掉近千行。
然後當時我就宣稱不用一百行,我就能做出含視窗介面、AI 和流程控制的井字遊戲。

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

Perendev motor 發明人 Michael Brady 在今年三月底於瑞士遭到逮捕並引渡德國,現在面臨詐欺罪起訴。Perendev motor 號稱是可以投入量產的免費能源,前幾年在網路上相當熱門,也有不少擁護者。

不過 Perendev motor 從來沒提供過什麼稱得上證據的東西,只有網路上幾段不到10分鐘但解析都還不錯的影片。我以為任何腦筋清醒的人都會同意,那幾段影片不能證明什麼。

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

最近幾天因為一個疑似研究醜聞,使得中研院陳垣崇所長又重新登上新聞頭條。上一次陳垣崇上新聞的時候,是因為哈里遜福特要演有關龐貝氏症的電影 Extraordinary Measures,而龐貝氏症解藥是陳垣崇花了 15 年的時間研發,所以新聞當然花了不少時間介紹陳的研究。記得那時候就有記者報導,哈里遜福特所飾演的角色就是陳垣崇。

等等,印第安納瓊斯要演台灣人?這似乎有點怪。而且當時我竟然沒有產生懷疑,真是太不應該了。

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

我本來對世界盃足球賽沒什麼興趣,所以起先對國外網友強力聲討的 Vuvuzela 沒什麼感覺,不過看到加入批判行列的人越來越多,所以我也稍微看了一下。

這就是 Vuvuzela

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

據統計,透過搜尋連結至本部落格最常用的關鍵字是某靈媒的名字,其次是某特異功能人士的名字,雖然我有點不爽但並不算太意外。

真正讓我意外的是,有人用「C 真亂數產生器」之類的關鍵字連過來,我猜是因為這篇文章的關係。我覺得意外的原因,是因為我以為這是已經是最基本的常識。

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

大概去年底解答一位網友的問題,沒想到今天我自己也碰上了。唉,我已經很少犯這類錯誤了說。

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

看完波斯王子了,這好像是今年為止第一部想上電影院看的片子,而且有很大一部分原因就只是衝著片名而已

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

醫學:幽靈寫手:生醫論文背後的利益結構
 [Aug 08, 2009]

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