为什么这个交换宏不会编译?

时间:2014-08-31 14:29:10

标签: c

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; }

1 个答案:

答案 0 :(得分:12)

问题是你在\行延续字符后面有空格。因此,\不再被视为行继续,而只是非空白字符。这意味着以下行是宏定义的一部分,并且编译器尝试将它们编译为普通行。在每个\之后删除空白将修复错误。