c - 如何使用预处理器缩短这些行?

标签 c c-preprocessor

我的代码中有这些行,我在想可能有一些很好的方法来使用预处理器生成这些行(0 到 31)。

    Mem_type MEM_0[MAX_NUM_MEM];
    Mem_type MEM_1[MAX_NUM_MEM];
    Mem_type MEM_2[MAX_NUM_MEM];
    Mem_type MEM_3[MAX_NUM_MEM];
    Mem_type MEM_4[MAX_NUM_MEM];
    Mem_type MEM_5[MAX_NUM_MEM];
    ...
    Mem_type MEM_30[MAX_NUM_MEM];
    Mem_type MEM_31[MAX_NUM_MEM];

    Mem_type *MEM[NUM_BANKS];

    MEM[0] = MEM_0;
    MEM[1] = MEM_1;
    MEM[2] = MEM_2;
    MEM[3] = MEM_3;
    MEM[4] = MEM_4;
    MEM[5] = MEM_5;
    ...
    MEM[30] = MEM_30;
    MEM[31] = MEM_31;

例如,像这样的东西:

    #define Gen(n) MEM[n] = MEM_n
    #for (k=0; k<32; k++) Gen(k);

(我不喜欢下面的原因是我发现我的机器有一些最大的连续数组大小限制,所以我试图将它分成单独的数组以便我可以有更大的聚合 MEM 大小。)

    Mem_type MEM[NUM_BANKS][MAX_NUM_MEM];

最佳答案

使用 boost/preprocessor/repetition/repeat.hpp :

#include <boost/preprocessor/repetition/repeat.hpp>
class Mem_type {};

#define MAX_NUM_MEM  5
#define NUM_BANKS    5

#define MEM_DECL(z, n, text)  Mem_type MEM_## n[MAX_NUM_MEM];
#define MEM_MEMB(z, n, text)  MEM_## n,

// expands to `Mem_type MEM_?[MAX_NUM_MEM];`
BOOST_PP_REPEAT(NUM_BANKS, MEM_DECL, ())

Mem_type *MEM[NUM_BANKS] = {
    // expands to `MEM_?,`
    BOOST_PP_REPEAT(NUM_BANKS, MEM_MEMB, ())
};

关于c - 如何使用预处理器缩短这些行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55702316/

相关文章:

c - Linux内核中嵌入锁的动态分配/释放结构

c - 需要 C 中指针和取消引用运算符的描述

c - 链表循环迭代改变全局变量头

c++ - 更改预处理器符号的值以进行测试

c - 我不明白的预处理器宏

c - 参数化包括

c - recvmsg() 返回 "Resource temporarily unavailable"

c - 优化计算最大素数除法的算法

c++ - 扩展/重组宏元组

C 预处理器宏