引用 | 編輯
i-c0112
2011-01-19 18:03 |
樓主
▼ |
||
x0
前幾天要測試插件時卻無法compile錯誤訊息: <329> : erro 038: extra characters on line出錯部分內容: 複製程式 #define DEBUG 1 ... /*327*/ #if DEBUG == 1 /*328*/ client_print(0, print_notify, msg2) /*329*/ #elseif DEBUG >= 2 /*330*/ client_print(0, print_center, msg2) /*331*/ #endif 實在不知道為什麼錯...Pawn_Language_Guide.pdf裡也是這麼用的= = 還是我的compiler有問題!? x0
|
引用 | 編輯
史來姆
2011-01-19 19:35 |
3樓
▲ ▼ |
為甚麼你要這樣寫呢?
#define DEBUG 1 .... if (DEBUG>=1) xxxx else if (DEBUG>=2) yyyyy 這樣不行麼? x1 |
引用 | 編輯
a7811311622
2011-01-20 17:28 |
6樓
▲ ▼ |
大概是因為…「#define」寫出來的都是定值…是不會變化的…
畢竟用到「#elseif」代表這數值存在著變化… 所以「拿判斷式來判斷一個不可能會變化的值」這點可能有問題吧… x1 |
引用 | 編輯
a7811311622
2011-01-21 01:00 |
8樓
▲ ▼ |
引用 | 編輯
z1022001
2011-01-21 08:14 |
10樓
▲ ▼ |
會不會是要寫成:?
/*327*/ #if DEBUG == 1 /*328*/ client_print(0, print_notify, msg2) /*329*/ #elseif DEBUG >= 2 ... x0 |
引用 | 編輯
a7811311622
2011-01-21 12:32 |
12樓
▲ ▼ |
下面是引用 i-c0112 於 2011-01-21 01:39 發表的 : 算了…那不重要…反正剛才自己不小心推翻自己的說法了… 目前我是知道為何會編譯錯誤了…原因其實是…邏輯錯誤… 如果你改成: 複製程式 #define DEBUG 1 #if DEBUG >= 2 #elseif DEBUG >= 1 #endif 這樣編譯就沒問題了…至於為何你原本的寫法會錯誤…? 原因是: 複製程式 //當 DEBUG >= 1 時早就包括 DEBUG >= 2 的內容了… //所以編譯時才會出現錯誤「extra characters on line」…因為以邏輯上來說這行的確是多餘的… #if DEBUG >= 1 #elseif DEBUG >= 2 #endif //當 DEBUG >= 2 時並不包括 DEBUG >= 1 的內容了… //因為有唯一的例外:DEBUG == 1 ,所以邏輯上沒錯誤… #if DEBUG >= 2 #elseif DEBUG >= 1 #endif 後來又發現上面說法又被推翻了…好像不是邏輯的問題… 如果將原本的寫法改成: 複製程式 #define DEBUG 1 #if DEBUG >= 2 #elseif DEBUG == 1 #endif 這樣也不會編譯錯誤…目前又只能猜測… 「#if」裡比較的內容要大於「#elseif」裡比較的內容? x0 |
引用 | 編輯
i-c0112
2011-01-21 14:56 |
13樓
▲ ▼ |
下面是引用 a7811311622 於 2011-01-21 12:32 發表的 :這個現象好像是這樣的: 當#if 的條件達成時 #elseif 就會出錯 因為我照大大的改是可以compile 但是改成 #define DEBUG 2後又不行了... 所以我只好改成這樣了...變得比較麻煩 複製程式 #define DEBUG 2 #if DEBUG >= 2 say_hello(0) #else #if DEBUG == 1 say_hi(0) #endif #endif x0 |