2008年9月19日 星期五

少使用global變數的原因

在最近碰到的很多bug都是和global變數有關的:

1. 使用curl + openssl做https連線,由於openssl一些變數是用global的,所以在multi-thread會有random crash的情形產生。解決方法是要實作openssl裡面提供的lock callback function。

2. 使用pygtk時,檔名取成gtk.py,造成import module的時候gtk.glade無法讀取。

3. 使用localtime和mktime return回來的 struct tm *,連續的呼叫造成結果都會和最後一次相同。

這些bug都非常的讓人頭痛,因為一開始一定會先查看自己的code是否有問題,或是哪些library沒有裝好之類的。最後在慢慢往下trace時,才會發現到是這樣的問題。

所以說使用global變數是非常容易出錯的做法。更正確的來說,如果你的程式要被別人呼叫,或是要和別人的程式溝通,最好避免使用global變數,以免造成自己和別人的困擾。

而在自製function、class時,如果要取太通用的名字,ex : time、string、...,最好加上一個前置的字串。在某一篇文章裡面他說可以加上你的英文縮寫在前面,以防止別人用跟你一樣的function name或 class name造成錯亂。

參考資料 :
debug 心得

沒有留言: