#define 在一行中处理多个宏

#define 'ing multiple macros in one line

本文关键字:处理 一行 #define      更新时间:2023-10-16

在C++中,我们可以使用#define来定义像#define PI 3.14这样的宏,然后在整个代码中使用PI来表示3.14

我的问题是:我们可以在一行中#define多个宏吗?这样我就不需要写n行来定义n个宏了。

事实上,我想这样做是为了用替换名称(实际上是字母)来表示数组元素,正如下面的代码片段所示。

#include <cstdlib>
#include <math.h>
#include <time.h>
#define R dig[0]
#define E dig[1]
#define D dig[2]
#define B dig[3]
#define L dig[4]
#define U dig[5]
#define Y dig[6]
#define O dig[7]
#define W dig[8]
using namespace std;
int main() {
    int dig[9]={1,2,3,4,5,6,7,8,9}; // R,E,D,B,L,U,Y,O,W
    return 0;
}

有没有一种方法可以在一行中#define所有这些宏,这样我就不必像上面的代码片段那样写多行了?谢谢

定义一个宏已经够糟糕的了。

在你的评论中,你想知道另一种方法。C++中有一个:

auto &R = dig[0], &E = dig[1], &D = dig[2] // etc ...

这不仅仅是一行,甚至是一句话。稍微详细一点,你可以做

auto &R = dig[0]; auto &E = dig[1]; auto &D = dig[2] // etc ...

现在一行有多个语句。(请参阅分号?)

AFAIK#define语句的末尾是行的末尾。所以不,你不能在一行中写几个单独的。正如有人提到的,在这里使用enum。

不,这在C或C++中都不可能。

您是否考虑过编写一个程序来在构建时生成重复代码?这是一种被低估的技巧。