c - 为什么这个交换宏不能编译?

标签 c

K&R 2nd ed answer book 具有以下可变参数交换宏的解决方案

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

最佳答案

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

关于c - 为什么这个交换宏不能编译?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25592932/

相关文章:

c - 在C中查找 "double free or corruption (out):"的原因

c - 刽子手游戏的简化(且不完整)版本中的错误

c - 使用isupper函数

c - 如何填充、洗牌、发牌游戏

c - 预处理器指令不起作用

c - 编辑信息

c - Doxygen 不区分 `union myname` 和 `struct myname`

c++ - 在单编写器多阅读器情况下,是否需要为uint64_t锁定?

c - 如何在sqlite3中限制数据长度

C - 可以播放音乐吗?