發表文章

目前顯示的是 6月, 2008的文章

十大豪門不買阿爾沙文的理由

Euro2008 結束了,雖然很遺憾地,我支持的球隊終究無法走到最後, 但以後再來分享心情吧 本屆 Euro2008 最搶眼的新秀(?)無疑是 Russia 的 Arshavin,大賽結束後自然引起不少俱樂部追逐。下面是一篇在網路上看到的笑話~ 利物浦 記者:請問您會買阿爾沙文嗎? 貝帥:是西班牙人嗎? 記者:不是 貝帥:那你還問! 切爾西 記者:請問您會買阿爾沙文嗎?你祖國的耶! 阿布:他值多少錢? 記者:不能太貴吧。肯定不超過1000萬鎊。 阿布:靠,在支票上寫這麼小的數字我都不好意思下筆! 阿森納 記者:請問您會買阿爾沙文嗎? 教授:他多大了? 記者:27了。 教授:靠,你要我買老頭子啊? 曼聯 記者:請問您會買阿爾沙文嗎? 爵爺:沒聽說過這個人! 記者:怎麼會?最近他這麼紅! 爵爺:靠,以為都像你們有心情天天看歐洲杯啊,老子現在被C-羅這個狗日的整的 連鹽都吃不下! 米蘭 記者:請問您會買阿爾沙文嗎? 加利亞尼:他幾歲啊? 記者:27吧。 加利亞尼:小伙太年輕了,恐怕經驗不足啊。 皇馬 記者:請問您會買阿爾沙文嗎? 卡爾德隆:你看弗格森被我整的,哈哈,你看弗格森被我整的,哈哈哈哈。 記者:對不起,我是問阿爾沙文。 卡爾德隆:哈哈,你看弗格森被我整的。 巴薩 記者:請問您會買阿爾沙文嗎? 拉波爾塔:他是支持小羅-德科-梅西系,還是支持普約爾-哈維系,還是法語幫? 記者:這個目前恐怕還難說。 拉波爾塔:哎,他人是不錯,就怕來了之後站錯隊啊。 尤文 記者:請問您會買阿爾沙文嗎? 塞科:不便宜啊,不好搞啊。 記者:你們是尤文咧!轉會出了名牛B啊! 塞科:說來慚愧,我比老莫遠了。 國米 記者:請問你會買阿爾沙文嗎? 莫拉蒂:他是米蘭尤文看上的人嗎? 記者:好像不是。 莫拉蒂:等米蘭尤文看上了再芊吧! 拜仁 記者:請問你會買阿爾沙文嗎? 魯梅尼格:這得讓我跟赫內斯討論過後再決定 記者:請問你想買阿爾沙文嗎? 赫內斯:這發讓我跟貝肯鮑爾討論過後再決定 記者:請問你認同買阿爾沙文嗎? 貝肯鮑爾:這讓我跟魯梅尼格討論過後再決定 克林斯曼:...........

printf 要注意的小細節

先看看下面的程式碼,非常簡單 #include int main() { int a = 28; int b = 4; double x = 2.8; double y = 0.4; printf( "a/b = integer~ %d\n", (a/b) ); printf( "a/b = float~ %f\n", (a/b) ); printf( "a/b = double~ %lf\n",(a/b) ); printf( "a/b = float~ %f\n", (double)(a/b) ); printf( "a/b = double~ %lf\n",(double)(a/b) ); printf( "x/y = integer~ %d\n", (int)(x/y) ); printf( "x/y = float~ %f\n", (x/y) ); printf( "x/y = double~ %lf\n", (x/y) ); return 0; } 很簡單吧,但是顯示出來的結果可能出乎一些人的意料~ a/b = integer~ 7 a/b = float~ 0.000000 a/b = double~ 0.000000 a/b = float~ 7.000000 a/b = double~ 7.000000 x/y = integer~ 6 x/y = float~ 7.000000 x/y = double~ 7.000000 呵呵,為什麼呢~ 太簡單了,不想回答~ 但在這裡留下一個記錄,提醒不要犯下這種愚蠢的錯誤。

在 Header File 中定義所要注意的細節~File Scope

請先看看下面的程式: test.h #ifndef _TEST_H_ #define _TEST_H_ int AAA( void ) { printf("Hello!!\n"); return 0; } int BBB( void ); // defined in test1.c int CCC( void ); // defined in test2.c #endif test1.c #include #include "test.h" int BBB( void ) { AAA(); printf( "Hello~ test1!!\n" ); return 0; } test2.c #include #include "test.h" int CCC( void ) { BBB(); printf( "Hello~ test2!!\n" ); return 0; } int main() { CCC(); return 0; } 使用下面的指令進行編譯 gcc -c test1.c gcc test1.o test2.c 結果看到下面的錯誤信息: /tmp/ccSQ7VRf.o: In function `AAA': test2.c:(.text+0x0): multiple definition of `AAA' test1.o:test1.c:(.text+0x0): first defined here collect2: ld returned 1 exit status 很吸引我注意的是「 multiple definition 」這字眼,因為在整個程式裡面,其實明明就只定義一次。 問題出在哪裡呢?恩,File Scope 在編譯 test1.o 的時候,因為 test1.c 中引入了 test.h,所以 test1.c 的程式展開後會包含 AAA 的定義。而當 test2.c 再去引入 test.h 並連結 test1.o 時,當然會發生重複定義的問題。 要避免這問題的方法,就是在 AAA 的定義裡面加上 static ,這個以限制該 Function 的 file scope 只在