我使用下面在我的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); \
}
我使用下面在我的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); \
}
大多數編譯器都提供了一些獲取代碼預處理形式的方法。用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
,我明白我的宏有什麼問題。
錯誤消息應該引用一個行號。它是否指向宏定義(如果是這樣,哪一行)或者宏的調用?這個調用是什麼樣子的?你能向我們展示一個能證明問題的小型完整源文件嗎?每個'\'在行的最後,沒有尾隨空格? (上面爲我編譯沒有錯誤。) –
@itsnikki - 找到解決方案後,您不應該更正問題中的代碼,因爲這會使答案看起來很有趣。 –
@BoPersson:根據OP的評論,空白行不在導致問題的代碼中 - 而且在空白行中,它可能不會產生該錯誤消息。 –