2011-11-13 55 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,我明白我的宏有什么问题。