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

如何通过传参单宏批量定义指定数量的唯一C变量?

用宏TOTO(n)自动生成指定数量的唯一变量

你要的是无需手动列参数,靠__COUNTER__自动生成toto0、toto1…这类变量的宏,直接上可行方案:

基础实现(简单直接,按需扩展层级)

// 每次调用生成一个带自增后缀的变量
#define VAR() int toto##__COUNTER__ = 0;

// 预定义不同次数的重复宏
#define REPEAT_0()
#define REPEAT_1() VAR()
#define REPEAT_2() REPEAT_1() VAR()
#define REPEAT_3() REPEAT_2() VAR()
#define REPEAT_4() REPEAT_3() VAR()
// 要支持更多数量就继续追加,比如REPEAT_5() REPEAT_4() VAR()

// 对外暴露的TOTO宏,把传入的数字映射到对应的重复宏
#define TOTO(n) REPEAT_##n()

使用示例

当你写TOTO(3)时,预处理器会直接展开为:

int toto0 = 0; int toto1 = 0; int toto2 = 0;

进阶递归版(接近“循环”逻辑)

如果不想手动逐个定义REPEAT_N,可以用递归递减的方式实现:

#define VAR() int toto##__COUNTER__ = 0;

// 递归重复调用VAR(),直到n减到0停止
#define REPEAT(n) \
    IF_GT(n,0)(VAR() REPEAT(DEC(n)))

// 辅助宏:判断n是否大于0,大于则执行后续代码
#define IF_GT(n,val) IF_GT_##n##_##val
#define IF_GT_0_0(...)
#define IF_GT_1_0(...) __VA_ARGS__
#define IF_GT_2_0(...) __VA_ARGS__
#define IF_GT_3_0(...) __VA_ARGS__
// 需扩展到你需要支持的最大数值

// 辅助宏:实现n的递减操作
#define DEC(n) DEC_##n
#define DEC_1 0
#define DEC_2 1
#define DEC_3 2
// 对应扩展到最大数值

#define TOTO(n) REPEAT(n)

关键注意点

  • __COUNTER__是GCC、Clang、MSVC等主流编译器都支持的预定义宏,每次被引用时自动递增,确保变量名唯一。
  • 两种方案都受编译器预处理器递归深度限制,默认支持几十层,足够日常场景使用;若需支持数百个变量,只需手动扩展对应宏的层级即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 03:11:07