2011-11-13 81 views
5

我使用下面在我的C程序中提到的宏來開發POS應用程序。當我編譯這段代碼時,程序錯誤中會出現流浪'\'。任何人都可以幫助我解決這個問題嗎?編譯時程序錯誤中遺漏''

#define FF(a, b, c, d, x, s, ac) \ 
    {(a) += F ((b), (c), (d)) + (x) + (UINT4)(ac); \ 
    (a) = ROTATE_LEFT ((a), (s)); \ 
    (a) += (b); \ 

     } 
+0

錯誤消息應該引用一個行號。它是否指向宏定義(如果是這樣,哪一行)或者宏的調用?這個調用是什麼樣子的?你能向我們展示一個能證明問題的小型完整源文件嗎?每個'\'在行的最後,沒有尾隨空格? (上面爲我編譯沒有錯誤。) –

+3

@itsnikki - 找到解決方案後,您不應該更正問題中的代碼,因爲這會使答案看起來很有趣。 –

+0

@BoPersson:根據OP的評論,空白行不在導致問題的代碼中 - 而且在空白行中,它可能不會產生該錯誤消息。 –

回答

7

刪除右括號之前的行。

(a) += (b); \ 
      <---- 
} 

此外,作爲一種風格,你至少應該排列反斜槓。

+0

這可能不是問題..實際上這行只是在這裏添加..代碼中沒有空格。 – itsnikki

+0

@itsnikki我只是花時間運行代碼。它會在您刪除該行時進行編譯。也許錯誤在別處? – cnicutar

3

大多數編譯器都提供了一些獲取代碼預處理形式的方法。用gcc它是gcc -C -E source.c > source.i;你應該看看這種形式。在Linux下,我有時會這樣做:

gcc -C -E source.c | grep -v '^#' | indent > source.i 
gcc -Wall -c source.i 

grep -v '^#'正在刪除生成的行編號。然後我在錯誤位置查看source.i,我明白我的宏有什麼問題。