2013-08-22 1014 views
2

嗨,我一直在試圖將LWIP移植到新的arm設備上。當編譯代碼我得到的錯誤信息:gcc c error:expected')'before numeric constant

"lwip/lwip-1.4.0/src/include/lwip/memp_std.h:35:23: error: expected ')' before numeric constant" 

當我去到這個文件這一點,下面這幾個類似的宏是什麼,我在該行發現:

LWIP_MEMPOOL(RAW_PCB, MEMP_NUM_RAW_PCB,   sizeof(struct raw_pcb),  "RAW_PCB") 

如果我刪除需要對於具有用於取消激活RAW功能的定義的宏,錯誤將移動到下一個LWIP_MEMPOL()宏。

的定義似乎想要把一個「)」中被定義爲這個前:

#define MEMP_NUM_RAW_PCB   1 

的RAW_PCB沒有定義,但「與MEMP_結合」在枚舉創建一個元素。

我試圖用-E選項來編譯整個ting以獲取人類可重畫對象文件,並查看我是否可以找到任何打開的'(',在MEMP_RAW_PCB apears和MEMP_NUM_RAW_PCB替換爲1的區域周圍,但我有未發現人工檢查還沒有任何。

是否有什麼可怎麼回事還是什麼,我還能做什麼或找,找到錯誤的原因是什麼?

也許我應該補充一點,所以任何建議遠遠我不會呼叫main()中的任何LWIP代碼或main()中使用的任何函數。

+2

我建議查看一下從該行產生的預處理器輸出。 – alk

+0

這很快,謝謝:)。是的,這是我使用-E選項獲取.o文件時的操作。我想我應該仔細看看:)。任何想法我應該尋找什麼? – ElvishPriestley

+0

預處理器以某種方式從'memp_std.h:35'上的宏生成無效代碼。檢查這些代碼。 – alk

回答

1

我解決了它:

#ifndef MEMP_STD_H_ 
#define MEMP_STD_H_ 

... // memp_std.h codes ... 

#endif //#ifndef MEMP_STD_H_ 
+0

哈哈頭盔衛士根本沒有想到這一點,我想這應該被報告爲一個錯誤到LWIP維護人員,我目前沒有使用它,但當你說這可以解決問題時,我相信你。 – ElvishPriestley

0

e rror表明你有不平衡的括號。您提供的代碼到目前爲止並不表明問題出在哪裏,但由於預期爲),這可能意味着錯誤實際上出現在您顯示的代碼之前的代碼行中。

檢查顯示的行之前的代碼(可能在使用gcc -E後)檢查所有括號是否平衡。

+0

memp_std.h文件上面的代碼由define和ifdefs(帶有endifs)組成,在那個文件中沒有打開'(')。我一直試圖在預編譯.o文件後編譯與-E選項,但到目前爲止我還沒有找到它,我會再次拍攝明天 – ElvishPriestley

0

如果你與儀表板上d選項定義它,它會生成默認爲1,例如:

gcc -D 'MAX(A,B) ((A) < (B)? (B) : (A))' ... 

生成:

#define MAX(A,B) ((A) < (B)? (B) : (A)) 1 

而且你得到error: expected ‘)’ before numeric constant消息在由於尾隨1而發生替換的行,例如:

int maxval = MAX(i,j); 
// generates: int maxval = ((i) < (j)? (j) : (i)) 1; 

相反,如果你使用賦值運算符明確定義的值,它會自動產生你所期望的方式。例如:

int maxval = MAX(i,j); 
// generates: int maxval = ((i) < (j)? (j) : (i)); 
相關問題