You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用C预处理器生成嵌套for循环(替代递归,深度2-10,禁用Boost)

用标准C预处理器生成指定深度的嵌套for循环

因为你的循环深度固定在2-10之间,完全可以基于标准C预处理器手动实现嵌套循环生成,不需要依赖Boost库。核心思路是逐层定义对应深度的宏,自动嵌套循环结构,并将所有循环变量传递给最终的计算逻辑。

实现代码

首先定义辅助宏用于标识符连接,再分别实现深度2到10的循环宏:

// 辅助宏:用于拼接两个标识符
#define CAT(a, b) CAT_INNER(a, b)
#define CAT_INNER(a, b) a##b

// 主入口宏:根据传入的深度调用对应循环宏
#define FOR_N(n, ...) CAT(FOR_, n)(__VA_ARGS__)

// 深度2的嵌套循环
#define FOR_2(var1, bound1, var2, bound2, func) \
    for (int var1 = 0; var1 < bound1; var1++) { \
        for (int var2 = 0; var2 < bound2; var2++) { \
            func(var1, var2); \
        } \
    }

// 深度3的嵌套循环
#define FOR_3(var1, bound1, var2, bound2, var3, bound3, func) \
    for (int var1 = 0; var1 < bound1; var1++) { \
        FOR_2(var2, bound2, var3, bound3, func, var1) \
    }

// 深度4的嵌套循环
#define FOR_4(var1, b1, var2, b2, var3, b3, var4, b4, func) \
    for (int var1 = 0; var1 < b1; var1++) { \
        FOR_3(var2, b2, var3, b3, var4, b4, func, var1) \
    }

// 深度5
#define FOR_5(var1, b1, var2, b2, var3, b3, var4, b4, var5, b5, func) \
    for (int var1 = 0; var1 < b1; var1++) { \
        FOR_4(var2, b2, var3, b3, var4, b4, var5, b5, func, var1) \
    }

// 深度6
#define FOR_6(var1, b1, var2, b2, var3, b3, var4, b4, var5, b5, var6, b6, func) \
    for (int var1 = 0; var1 < b1; var1++) { \
        FOR_5(var2, b2, var3, b3, var4, b4, var5, b5, var6, b6, func, var1) \
    }

// 深度7
#define FOR_7(var1, b1, var2, b2, var3, b3, var4, b4, var5, b5, var6, b6, var7, b7, func) \
    for (int var1 = 0; var1 < b1; var1++) { \
        FOR_6(var2, b2, var3, b3, var4, b4, var5, b5, var6, b6, var7, b7, func, var1) \
    }

// 深度8
#define FOR_8(var1, b1, var2, b2, var3, b3, var4, b4, var5, b5, var6, b6, var7, b7, var8, b8, func) \
    for (int var1 = 0; var1 < b1; var1++) { \
        FOR_7(var2, b2, var3, b3, var4, b4, var5, b5, var6, b6, var7, b7, var8, b8, func, var1) \
    }

// 深度9
#define FOR_9(var1, b1, var2, b2, var3, b3, var4, b4, var5, b5, var6, b6, var7, b7, var8, b8, var9, b9, func) \
    for (int var1 = 0; var1 < b1; var1++) { \
        FOR_8(var2, b2, var3, b3, var4, b4, var5, b5, var6, b6, var7, b7, var8, b8, var9, b9, func, var1) \
    }

// 深度10
#define FOR_10(var1, b1, var2, b2, var3, b3, var4, b4, var5, b5, var6, b6, var7, b7, var8, b8, var9, b9, var10, b10, func) \
    for (int var1 = 0; var1 < b1; var1++) { \
        FOR_9(var2, b2, var3, b3, var4, b4, var5, b5, var6, b6, var7, b7, var8, b8, var9, b9, var10, b10, func, var1) \
    }

用法示例

1. 带参数的计算函数

如果你的计算逻辑需要用到所有循环变量,直接传入函数名即可:

#include <stdio.h>

void compute_3(int i, int j, int k) {
    printf("i=%d, j=%d, k=%d\n", i, j, k);
}

int main() {
    // 生成深度3的嵌套循环,边界分别为2、3、4
    FOR_3(i, 2, j, 3, k, 4, compute_3);
    return 0;
}

2. 无参数的计算函数

如果计算逻辑不需要循环变量,用可变参数宏适配即可:

#include <stdio.h>

void do_computation() {
    printf("Running computation...\n");
}

// 适配宏:忽略所有传入的参数
#define DO_COMPUTE(...) do_computation()

int main() {
    // 生成深度2的嵌套循环
    FOR_2(x, 5, y, 5, DO_COMPUTE);
    return 0;
}

3. 动态指定循环深度

通过宏定义控制循环深度,用FOR_N统一调用:

#define LOOP_DEPTH 4

void compute_4(int a, int b, int c, int d) {
    // 自定义计算逻辑
}

int main() {
    FOR_N(LOOP_DEPTH, a, 2, b, 3, c, 4, d, 5, compute_4);
    return 0;
}

注意事项

  • 每个FOR_N宏的参数顺序为:变量1, 边界1, 变量2, 边界2, ..., 变量n, 边界n, 计算函数/宏
  • 计算函数/宏的参数数量需匹配循环深度,或用可变参数宏忽略多余参数
  • 完全基于标准C预处理器实现,无外部依赖

内容的提问来源于stack exchange,提问作者Andrew Mathews

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 23:18:24