【发布时间】:2021-10-10 19:21:03
【问题描述】:
我需要一个 C 中的宏来执行此操作:
ARRINIT(10, 0) => {0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
然而,据我了解,C 宏中没有常规循环。所以我尝试编写一个函数,它接受一个数字和一个 void 指针并返回一个初始化的数组。但这需要指针,我希望它与常数一起使用。此外,我想将它用于所有内容:函数、整数、浮点数、字符串等。所以我很可能需要一个宏。 我怎样才能达到这种效果?
【问题讨论】:
-
你看过
memset吗? -
有可能。命名不是很好(不一定是数组初始化,也可以是结构初始化)。这也是相当困难和不平凡的。您可以查看github.com/rofl0r/chaos-pp 以获得灵感。
-
cpp不会为你这样做 [即使是在胁迫/折磨 :-)]。你想要一个“代码生成器”程序。像m4这样的“真正的”宏处理器或perl/python/c程序,您编写并添加到您的Makefile 以生成您想要的源代码(即元编程)。 -
@CraigEstey "@CraigEstey "
cpp不会为你做这件事 [即使在胁迫/折磨下:-)]" “这个”是指this ? -
@HWalters 哦,真是个黑客! ;-) 它也适用于 C 吗? -- 无论如何,为了使它更有用,我希望
REPEAT(4, x)扩展为x, x, x, x而不带大括号和最后的逗号。这样,人们可以使用它的倍数来填充同一数组/结构/任何东西中的区域。但是,我永远不会使用这样的宏,只是因为它隐藏的太多。
标签: c loops macros initializer