發表文章

目前顯示的是 六月, 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 只在 test1.c 裡面,自然 test2.c 要再去宣告是可以的~

我比較喜歡…