2014-08-31 51 views
4

在K & [R第二版答案本书有一个可变参数互换宏以下解决方案这个交换宏为什么不能编译?

#define swap(t, x, y) { t _z; \ 
         _z = y; \ 
         y = x; \ 
         x = _z; } 

的Visual Studio Express的告诉我,Y和X必须恒定值,并且有一个“预期声明”在右大括号的左边。

这是格式化过时吗?

编辑:

代码格式化不会让我编译上面列出的错误的方式,但下面的代码似乎是罚款:

#define swap(t, x, y) { t _z; _z = y; y = x; x = _z; } 
+3

你如何调用它?你试过'swap(int,xx,yy);'在'int xx,yy;'之后' – 2014-08-31 14:31:29

+2

你如何使用宏?它应该是'swap(int,a,b)' – nneonneo 2014-08-31 14:31:43

+1

我甚至没有编译过任何东西。它不会让我编译它,因为有我在上面发布的错误。 – Spellbinder2050 2014-08-31 14:32:59

回答

12

的问题是你有空白\行后续字符。因此,\不再被视为续行,而只是一个非空白字符。这意味着以下行是而不是宏定义的一部分,编译器会尝试将它们编译为普通行。在每个\之后摆脱空白将解决错误。