2010年1月1日 星期五

思樂康存在嚴重副作用!日本接到13例報告

思樂康存在嚴重副作用!日本接到13例報告

思樂康存在嚴重副作用!日本接到13例報告

2002/11/11 09:07
日本厚生勞動省11月7日要求英國阿斯利康(AstraZeneca)公佈其製造的“思樂康(Seroquel)片劑”(專業名稱:富馬酸奎的平)的緊急 安全資訊。因為,儘管該藥於今年7月上市後因接到副作用報告、在藥品的“其他副作用”一欄中追加了“高血糖”,並提請醫務人員加以注意。但其後卻再次接到 糖尿病酮症酸中毒(Diabetic Detoacidosis)等症狀的報告。這是抗精神病藥在日本繼今年4月的“Zyprexa片劑”(專業名稱:奧氮平Olanzapine)之後,第二 種因糖代謝相關副作用而被要求公佈緊急完全資訊的藥物。

富馬酸奎的平自今年2月開始上市至今,共收到13例出現高血糖、糖尿病酮症酸中毒和糖尿病昏迷(Diabetic Coma)等症狀的報告。其中1例已經死亡。

據此,將在藥品說明書附帶的“禁忌”欄中追加“禁止向糖尿病患者及有糖尿病病史的患者給藥”。另外,還建議“在給藥過程中,要充分進行血糖值 的測定等觀察,一旦出現異常,立刻停止用藥,並採取適當醫療措施”,“在給藥的時候,要向患者及其家屬充分告知可能出現這些副作用,並指導他們當出現口渴 等高血糖症狀時,應立即停止服用,並到醫療機構接受檢查”。

該藥于去年12月在日本批准上市,今年2月由藤澤藥品工業代理銷售。主要適用於綜合性功能紊亂症(精神分裂症),截止2002年9月,估計使用患者人數約13萬人。

extern 和 C/C++,C++技術文章,C++系列教程,C++

extern 和 C/C++,C++技術文章,C++系列教程,C++

1、 聲明外部變量

現代編譯器一般採用按文件編譯的方式,因此在編譯時,各個文件中定義的全局變量是
互相透明的,也就是說,在編譯時,全局變量的可見域限制在文件內部。下面舉一個簡單的例子。創建一個工程,裡面含有A.cpp和B.cpp兩個簡單的C++源文件:

//A.cpp
int i;
void main()
{
}


//B.cpp
int i;


這兩個文件極為簡單,在A.cpp中我們定義了一個全局變量i,在B中我們也定義了一個全局變量i。我們對A和B分別編譯,都可以正常通過編譯,但是進行鏈接的時候,卻出現了錯誤,錯誤提示如下:
Linking...
B.obj : error LNK2005: "int i" (
?i@@3HA) already defined in A.obj
Debug/A.exe : fatal error LNK1169: one or more multiply defined symbols found
Error executing link.exe.

A.exe - 2 error(s), 0 warning(s)

這就是說,在編譯階段,各個文件中定義的全局變量相互是透明的,編譯A時覺察不到B中也定義了i,同樣,編譯B時覺察不到A中也定義了i。但是到了鏈接階 段,要將各個文件的內容「合為一體」,因此,如果某些文件中定義的全局變量名相同的話,在這個時候就會出現錯誤,也就是上面提示的重複定義的錯誤。因此, 各個文件中定義的全局變量名不可相同。
在鏈接階段,各個文件的內容(實際是編譯產生的obj文件)是被合併到一起的,因而,定義於某文件內的全局變量,在鏈接完成後,它的可見範圍被擴大到了整 個程序。這樣一來,按道理說,一個文件中定義的全局變量,可以在整個程序的任何地方被使用,舉例說,如果A文件中定義了某全局變量,那麼B文件中應可以使 用該變量。修改我們的程序,加以驗證:
//A.cpp

void main()
{
i = 100; //試圖使用B中定義的全局變量
}
//B.cpp
int i;


編譯結果如下:
Compiling...
A.cpp
C:\Documents and Settings\wangjian\桌面\try extern\A.cpp(5) : error C2065: 'i' : undeclared identifier
Error executing cl.exe.

A.obj - 1 error(s), 0 warning(s)

編譯錯誤。
其實出現這個錯誤是意料之中的,因為:文件中定義的全局變量的可見性擴展到整個程序是在鏈接完成之後,而在編譯階段,他們的可見性仍侷限於各自的文件。編 譯器的目光不夠長遠,編譯器沒有能夠意識到,某個變量符號雖然不是本文件定義的,但是它可能是在其它的文件中定義的。雖然編譯器不夠遠見,但是我們可以給 它提示,幫助它來解決上面出現的問題。這就是extern的作用了。
extern的原理很簡單,就是告訴編譯器:「你現在編譯的文件中,有一個標識符雖然沒有在本文件中定義,但是它是在別的文件中定義的全局變量,你要放行!」我們為上面的錯誤程序加上extern關鍵字:
//A.cpp

extern int i;
void main()
{
i = 100; //試圖使用B中定義的全局變量
}


//B.cpp
int i;


順利通過編譯,鏈接。

2、 在C++文件中調用C方式編譯的函數

C方式編譯和C++方式編譯
相對於C,C++中新增了諸如重載等新特性,對於他們的編譯,必然有一些重要的區別。
我們將下面的小程序分別按C和C++方式編譯,來探討兩種編譯方式的區別。
int i;

int func(int t)
{
return 0;
}

void main()
{
}


以C方式編譯的結果:
COMM _i : DWORD

PUBLIC _func
PUBLIC _main

以C++方式編譯的結果:
PUBLIC
?i@@3HA ; i
PUBLIC ?func@@YAHH@Z ; func
PUBLIC _main

可見,C方式編譯下,變量名和函數名之前被統一加上了一個下劃線,而C++編譯後的結果卻複雜的多,i變成了?i@@3HA,func變成了?func@@YAHH@Z。C++中的這種看似複雜的命名規則是為C++中的函數重載,參數檢查等特性服務的。

多文件程序中的函數調用一般情況下,工程中的文件都是CPP文件(以及頭文件)。如下面的程序僅包含兩個文件:A.CPP和B.CPP:
//A.CPP
void func();

void main()
{
func();
}


//B.CPP
void func()
{
}


程序的結構是這樣的:在文件B.CPP中定義了一個函數void func(),main函數位於文件A.CPP,在main函數中調用了B中定義的函數func()。要在A中調用B中定義的函數,必須要加上該函數的聲 明。如本例中的void func();就是對函數func()的聲明。如果沒有聲明的話,編譯A.CPP時就會出錯。因為編譯器的目光只侷限於被編譯文件,必須通過加入函數聲明 來告訴編譯器:「某個函數是定義在其它的文件中的,你要放行!」,這一點跟用extern來聲明外部全局變量是一個道理。

需要注意的是,一般的程序都是通過包含頭文件來完成函數的聲明。拿本例來說,一般是創建一個頭文件B.H,在頭文件中加入聲明語句void func(); 並且在A.CPP中加入包含語句:#include 「B.H」。在C++程序中,頭文件的功能從函數聲明被擴展為類的定義。


不同編譯方式下的函數調用。如果在工程中,不僅有CPP文件,還有以C方式編譯的C文件,函數調用就會有一些微妙之處。我們將B.CPP改作B.C:
//A.CPP
void func();

void main()
{
func();
}


//B.C
void func()
{
}


對A.CPP和B.C分別編譯,都沒有問題,但是鏈接時出現錯誤。
Linking...
A.obj : error LNK2001: unresolved external symbol "void __cdecl func(void)" (
?func@@YAXXZ)
Debug/A.exe : fatal error LNK1120: 1 unresolved externals
Error executing link.exe.

A.exe - 2 error(s), 0 warning(s)

原因就在於不同的編譯方式產生的衝突。
對於文件A,是按照C++的方式進行編譯的,其中的func()調用被編譯成了call
?func1@@YAXXZ。如果B文件也是按照C++方式編譯的,那麼B中的func函數名也會被編譯器改成?func1@@YAXXZ,這樣的話,就沒有任何問題。
但是現在對B文件,是按照C方式編譯的,B中的func函數名被改成了_func,這樣一來,A中的call
?func1@@YAXXZ這個函數調用就沒有了著落,因為在鏈接器看來,B文件中沒有名為?func1@@YAXXZ的函數。
事實是,我們編程者知道,B文件中有A中調用的func函數的定義,只不過它是按照C方式編譯的,故它的名字被改成了_func。因而,我們需要通過某種方式告訴編譯器:「B中定義的函數func()經編譯後命名成了_func,而不是
?func1@@YAXXZ,你必須通過call _func來調用它,而不是call ?func1@@YAXXZ。」簡單的說,就是告訴編譯器,調用的func()函數是以C方式編譯的,fun();語句必須被編譯成call _func;而不是call ?func1@@YAXXZ
我們可以通過extern關鍵字,來幫助編譯器解決上面提到的問題。
對於本例,只需將A.CPP改成如下即可:
//A.CPP
extern "C"
{
void func();
}
void main()
{
func();
}


察看彙編代碼,發現此時的func();語句被編譯成了call _func。

3、 補充

同2一樣,仍然是C,C++混合編程的情形,考慮下面的程序:
//A.CPP
extern int i;

void main()
{
i = 100;
}


//B.C
int i;


程序很簡單:在文件B.C中定義了一個全局變量i,在A.CPP中使用了這個全局變量。
編譯沒有問題,鏈接時卻出現錯誤:
Linking...
A.obj : error LNK2001: unresolved external symbol "int i" (
?i@@3HA)
Debug/A.exe : fatal error LNK1120: 1 unresolved externals
Error executing link.exe.

A.exe - 2 error(s), 0 warning(s)

這是因為,在C方式編譯下,i被重命名為_i,而在C++方式下,i會被重命名為
?i@@3HA
因而,我們只用extern int i;來聲明還不夠,必須告訴編譯器,全局變量i是以C方式編譯的,它會被重命名為_i,而不是
?i@@3HA。我們修改A.CPP,如下:
//A.CPP

extern "C"
{
int i;
}
void main()
{

i = 100;
}


程序正常通過編譯和鏈接。我們察看一下彙編代碼,發現語句i = 100;被編譯成了mov DWORD PTR _i, 100。

2009年12月29日 星期二

直系血親不宜輸血? 偶像劇演對了-Yahoo!奇摩新聞

直系血親不宜輸血? 偶像劇演對了-Yahoo!奇摩新聞:
更新日期:2009/12/29 04:11
〔記者洪素卿/台北報導〕偶像劇「下一站,幸福」劇情漸入高潮,週日播出的最新一集,劇中醫師一句「直系血親不能輸血」,讓女主角安以軒及時阻止仍不知道自己是小孩生父的吳建豪輸血給小小彬,也引發戲迷們熱烈討論,此話究竟是否真有科學根據?
對此,醫師表示,偶像劇的編劇沒有寫錯,直系血親間輸血確實可能要命!
網友認為編劇鬼扯 引發熱烈討論
偶 像劇「下一站,幸福」,週日播出由小小彬飾演的「梁小樂」,從階梯上跌下來受傷流血,送醫急救需要輸血的橋段,安以軒飾演的媽媽欲捐血給兒子,遭劇中醫生 以「直系血親不能輸血給自己小孩」為由婉拒;緊接著吳建豪飾演的「任光晞」便表示自己血型相同願意捐血,但由於他就是孩子生父,使得孩子的媽媽脫口而出 「不能捐」,並向醫師使眼色求救。
雖然部分網友認為這又是一個常見的血型認親橋段,不過,網路上卻意外引發不少戲迷討論為什麼直系血親不能輸血?有人認為是編劇鬼扯,還有人說自己曾接受過父親輸血並沒有問題,甚至有網友推論其實是劇中醫師、亦即第二女主角為了試探男主角是不是孩子的爹。
不過,國內血液醫學專家、馬偕醫院林媽利醫師及台北榮民總醫院血液腫瘤科主治醫師邱宗傑均表示,編劇並沒有寫錯,直系血親間輸血確實可能引發「移植物抗宿主」的嚴重疾病。
醫師:可能引發移植物抗宿主疾病
林媽利解釋,某些家庭因其親子間的基因型態組合非常特別,以至於直系血親間輸血時,輸入患者體內的血液,反而對患者發動攻擊,就像是「乞丐趕廟公」一樣,導致嚴重致命反應。
雖說台灣約莫只有二%家庭有這類基因組合,且這些家庭發生「移植物抗宿主」疾病的機率也只有一%,但因一旦發生就無藥可解,且死亡率非常高,仍然不可不防。
以放射線照射血液 才能輸給患者
如果真的一時找不到其他血液,只剩直系血親能緊急輸血時,也不是完全沒有解套方法。林媽利指出,只要先將要輸給患者的血液以放射線照射,讓血液中可能對患者發動攻擊的淋巴球不能作怪,再輸入患者體內即可。
林媽利說,除了這類嚴重致命疾病外,由於多數人不見得清楚自己是否有潛在疾病,因此親屬間緊急輸血,並不比已經檢驗過關的血液更安全。

植完牙未回診 男子滿嘴黑牙-Yahoo!奇摩新聞

植完牙未回診 男子滿嘴黑牙-Yahoo!奇摩新聞

植完牙未回診 男子滿嘴黑牙

更新日期:2009/12/29 16:46

植牙可不是植完就沒事了,台南有一名男子在七年前植牙後,就沒有再回診過,直到最近植牙脫落,逼不得已回去看醫生,才發現他的植牙,全都佈滿黑黑的組織,看起來好像刺刺的狼牙棒,醫生說這都是沒有回診檢查的後果。
這 黑黑髒髒,長的像可怕狼牙棒的刺刺物體,居然就長在黃姓男子的植牙裡,想起來還怕怕的,討厭看醫生的黃先生,七年前在下方門牙植入了六顆牙齒後,再也沒有 回到牙醫診所複診,就算牙齒會痛也是忍一忍就算了,結果這一忍,忍出了大麻煩,他發現右邊的三顆植牙開始鬆動,還發出惡臭,只好回到牙醫診所,當醫生把鬆 動植牙拔下來時,他嚇傻了眼。
本以為堅固的植牙變成這副德行,黑黑刺刺的組織爬滿了植體,上面還搖搖欲墜的黏著一顆植牙,怎麼會變成這樣, 醫生說這是慢性細菌感染,因為植牙後沒有回到診所做深層清潔,才會變成這麼嚴重的後果,現在黃先生不但之前做的植牙全毀,還要接受長期治療才能再植牙,醫 生也提醒民眾植牙,一定要回到診所檢查,要不然就會像黃先生一樣,花大錢植牙,卻換來滿口爛牙。(完整影音新聞請 見:http://news.cts.com.tw/cts/life/200912/200912290376947.html)

An ellipsis at the end of the parameter

An ellipsis at the end of the parameter specifications is used to specify that a function has a variable number of parameters. The number of parameters is equal to, or greater than, the number of parameter specifications.
int f(int, ...);
C++ The comma before the ellipsis is optional. In addition, a parameter declaration is not required before the ellipsis.
C At least one parameter declaration, as well as a comma before the ellipsis, are both required in C.

C: Ellipsis operator (…) : printf « Programming in Linux

C: Ellipsis operator (…) : printf « Programming in Linux

C: Ellipsis operator (…) : printf

For more updates, check Programming Insights.
Ever imagined how printf works, even though we are able to pass a number of arguments to it. If we design a function which takes two arguments and pass three parameters, we are bound to get this error “too many arguments to function”i.e., suppose we have a function
int fun2(int a, int b)
and we call the function
fun2(2,3,4)
we are sure to get the above error. So the question is how printf / scanf works with variable number of arguments? This is because C has a feature called ellipsis (…) by which you are able to pass variable number of arguments?
So the prototype of printf is
int printf(const char *str,...)
But the next question is how then can we access the arguments in the function. This can be done by the power of pointers. Let’s take a pointer which points to the last argument before …
and depending on the next arguments of what we expect, we increment the pointer and increment it accordingly
Below is a simple code which shows how this can be done
int print(const char *str,...)

/*str has the number of integers passed*/

{

int i;

int num_count=atoi(str);

 int *num=(int *)&str;

for(i=1;i<=num_count;i++)

                printf("%d ",*(num+i));}

int print_num(int num_count,...)

/*num_count contains the number of integers passed*/

{

int i;

int *num=&num_count;

for(i=1;i<=num_count;i++)

printf("%d ",*(num+i));

}

int main()

{

print_num(3,2,3,4);

print("3",2,3,4);

}

For more updates, check Programming Insights.

網際論壇 - 硬體技術交流 - [教學]CPU風扇的安裝方式[圖]。

網際論壇 - 硬體技術交流 - [教學]CPU風扇的安裝方式[圖]。
#1 [教學]CPU風扇的安裝方式[圖]。

一、將散熱膏擠出少許置於CPU的主體上,不宜過多或太少,當風扇壓置於CPU上時,利用風扇壓力將散熱膏而能夠覆蓋CPU的核心主體為標準。 screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='Click here to open new window';}" onmouseover="if(this.resized) this.style.cursor='hand';" onclick="if(this.resized) {window.open(this.src);}" border="0">
二、將CPU風扇一邊扣片先行扣住SOCKET的一邊。
注意:CPU風扇扣片有方向性,正確安裝方向為先扣住CPU Socket沒有突出的一邊。
screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='Click here to open new window';}" onmouseover="if(this.resized) this.style.cursor='hand';" onclick="if(this.resized) {window.open(this.src);}" border="0">
三、再安裝另一個扣片至CPU Socket上的固定勾上,如下圖所示。基本上風扇的設計會以容易安裝為考量,因此,後扣上扣片的一邊通常會有讓安裝者有施力的位置,以方便安裝。
screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='Click here to open new window';}" onmouseover="if(this.resized) this.style.cursor='hand';" onclick="if(this.resized) {window.open(this.src);}" border="0">
四、當安裝完成後,必須檢查CPU風扇是否與CPU緊密連接,確定CPU與風扇間完全沒有間隙。
screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='Click here to open new window';}" onmouseover="if(this.resized) this.style.cursor='hand';" onclick="if(this.resized) {window.open(this.src);}" border="0">
五、若是安裝順序或方向錯誤時,則CPU與CPU風扇無法確實密合,如下圖所示。此時CPU風扇沒有確實與CPU核心主體接觸,無法達到散熱效果,容易導 致CPU過熱而當機。因此必須將風扇拆下重裝,拆下時請特別注意,不當的施力會將CPU本體壓壞,導致CPU損毀而無法正常工作。
screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='Click here to open new window';}" onmouseover="if(this.resized) this.style.cursor='hand';" onclick="if(this.resized) {window.open(this.src);}" border="0">
六、最後安裝CPU風扇的電源線,注意:不要讓電線纏住CPU風扇葉片,而導致風扇不運轉,使風扇失去作用。
screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='Click here to open new window';}" onmouseover="if(this.resized) this.style.cursor='hand';" onclick="if(this.resized) {window.open(this.src);}" border="0">
七、另外一種可能安裝錯誤的情形:方向與順序都正確,但是沒有將風扇與CPU對齊,導致風扇的一邊壓在Socket上面,導致風扇沒有與CPU緊密接觸,這樣的安裝也會讓讓散熱效果打折,應該避免。應該確實將風扇移至CPU正上方,與第四點的安裝方式相同。
screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='Click here to open new window';}" onmouseover="if(this.resized) this.style.cursor='hand';" onclick="if(this.resized) {window.open(this.src);}" border="0">

小D:若是風扇沒裝好,據說開機三次就掛了,本人剛好有一次燒壞CPU的紀錄!