如何制作多行预处理器宏?我知道怎么写一行:

#define sqr(X) (X*X)

但我需要这样的东西:

#define someMacro(X)
    class X : public otherClass
    {
         int foo;
         void doFoo();
    };

我怎样才能让它工作?

这只是一个例子,真正的宏可能很长.

推荐答案

使用\作为换行符.

#define swap(a, b) {               \
                       (a) ^= (b); \
                       (b) ^= (a); \
                       (a) ^= (b); \
                   }

编辑:正如@abelenky在 comments 中指出的,\个字符的must be the last character on the line.如果不是(即使后面只是空白),在它后面的每一行上都会出现令人困惑的错误消息.

C++相关问答推荐

sscanf:如何解析

如何将一个enum类型类型转换为另一个类型?

为什么我得到更多的256假阳性在PKZIP解密密钥验证?

将整数的.csv文件解析为C语言中的二维数组

难以理解Makefile隐含规则

在没有动态内存分配的情况下,用C语言最快地将各种数组复制到单个较大的数组中

ATmega328P EEPROM未写入

为什么GDB/MI进程的FIFO循环中有read()阻塞

VS代码';S C/C++扩展称C23真关键字和假关键字未定义

如何按顺序将所有CSV文件数据读入 struct 数组?

C I/O:在Windows控制台上处理键盘输入

如何在VS 2022中正确安装额外的C头文件

无法访问共享目标文件内的共享指针

将变量或参数打包到 struct /联合中是否会带来意想不到的性能损失?

如何在VSCode中创建和使用我自己的C库?

如何在不读取整个字符串的情况下删除UTF8字符串的尾随空格以提高性能?

如何使用空元素块声明指针数组

如果类型是新的,offsetof是否与typeof一起工作?

在列表中查找素数

为什么实现文件中的自由函数默认没有内部链接?