gpt4 book ai didi

运行时的 C 预处理器?

转载 作者:太空宇宙 更新时间:2023-11-04 00:14:42 26 4
gpt4 key购买 nike

我想做一个 token 连接,但我想用变量的内容而不是它的名字来做这件事。像这样。

<code>#define call_function(fun, number) fun##_##number ()</code><p></p>

<p>while (i < 10 ) {
call_function(fun, i);
}
</p>

可是我给fun_number(),我要给fun_1,fun_2,等等...

怎么做?

关于函数指针。

我正在处理用户在 ascii 字符上的输入,我的选择是 & * ^ > < 等等最多十个标记。

要在带有函数指针的数组中处理它,我需要创建一个包含 127 个 block 的数组,仅用于十个标记!

太贵了!感谢您的所有回答。

提前致谢!!!

最佳答案

#define call_function(fun, member) fun##_##number ()
// ------------------------^
// should be "number".

即便如此,您也只会得到fun_i。您不能在运行时调用预处理器宏,因为它们仅用于预处理(甚至在解析和编译之前)。

您需要手动展开循环。

call_function(fun, 0);
call_function(fun, 1);
call_function(fun, 2);
call_function(fun, 3);
call_function(fun, 4);
call_function(fun, 5);
call_function(fun, 6);
call_function(fun, 7);
call_function(fun, 8);
call_function(fun, 9);

或者使用__COUNTER__(需要gcc ≥ 4.3):

#define CONCAT3p(x,y,z) x##y##z
#define CONCAT3(x,y,z) CONCAT3p(x,y,z)
#define call_function(func) CONCAT3(func, _, __COUNTER__)()

call_function(fun);
call_function(fun);
call_function(fun);
call_function(fun);
call_function(fun);
call_function(fun);
call_function(fun);
call_function(fun);
call_function(fun);
call_function(fun);

关于运行时的 C 预处理器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2503178/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com