ES2 MUD LIB :: 東方故事二(ES2) 天朝帝國 mudlib 瀏覽展示

/doc/handbook/code.debug

HOME :: doc :: handbook :: code.debug
□ 巫師寫程式時常犯的錯誤跟一些簡單的解決方法
 
□ 編譯時產生的語法錯誤
 
Type of returned value doesn't match function return type ( xxx vs xxx )
 
原因    :比對或傳回值跟所要求的種類不合。
解決方法:最簡單的方法就是想辦法讓他們的種類變成一樣。舉例來說,如果你
          要比對的值是數值 (int) 但是傳回值是混合 (mixed) 你可以在傳回
          值前面加上 (int) 「強迫」他以數值的形態傳回。(type casting)
 
Undefined variable
 
原因    :使用的變數沒有宣告
解決方法:宣告該變數
 
Undefined function
 
原因    :呼叫到的函數沒有事先宣告
解決方法:確定函數的拼法正確,如果該函數不是  efuns 的話,確定你有繼承
          含有該函數的物件,如果該函數是定義在你的程式碼中,確定你有事
          先宣告這個函數。(function prototyping)
 
Illegal LHS before ...
parse error before ...
 
原因    :程式碼中有沒對應到的 {},(),"",或是缺 ;
解決方法:檢查是否所有的 { 都有一個對應的 },( 都有一個對應的 ),該有
          ; 的地方是否都有 ;
 
Warning: Unknown \x char
 
原因    :中文編碼 (BIG5)中包含 \ 這個字元,因為 \ 在 C 語言中用來當
          escape  character 的,所以當含有這類字元的中文字出現在程式碼
          中(敘述或訊息)就會出現這個警告。常用的字如武功的功,晚餐的
          餐...等等。
解決方法:在這類字的後面多加一個 \,如 武功,晚餐。
 
□ 邏輯上的錯誤,或是編譯成功,可是出來的結果不是你想要的
 
首先,順著程式一行一行找,是那一行開始出現問題的?如果有必要,你可以在
各節點間呼叫  printf() 或是 write() 等函數用來報告各個參數的目前值,用
以追查出錯的地方。
 
檢查你是否正確的使用 if() 這個函數。 if(a==b) 跟  if(a=b) 的含義不同,
前者會在 a 值等於 b 值時傳回真(True),後者則是如果 b 存在,且 a 能成
功的被設成 b 值時傳回真(True)。確定你要用的是前者還是後者。
 
如果你的程式中有用到比較的指令(if,case...等)先確定比較前各參數所
存的值是否為你要比較的東西,並且確定你有 type casting 的地方有傳回你所
期望的值(比方說,如果 str 是一個字串變數,裡面存有 "abc",則 (int)str
代表一個數值 0,確定這是你所要的)。
 
replace_program() 這個函數只能用在簡單的房間裡,所謂簡單的房間就是只包
含 create() 這個函數的房間. 如果你發現你在房間裡用 add_action() 所增加
的指令無法正常運作,請檢查你房間的程式碼中是否有  replace_program()
這行。註:因為 roommaker 一定會加上這一行,如果你用 roommaker 寫好的房
間再增加別的東西的話,視情況,請記得把 replace_program() 那行拿掉。
 
□ 如果真的找不出原因
那...只好找別的巫師幫你看了。問人以前請先確定你已經試過所有你能想到
的方法去解決,可是都沒成功,再去問人。
 
HOME :: doc :: handbook :: code.debug