我目前正在进行一个项目,每个循环都非常重要。在分析我的应用程序时,我发现某些内部循环的开销非常高,因为它们只由几条机器指令组成。此外,这些循环中的迭代次数在编译时已知。
所以我想,与其手动复制和粘贴展开循环,不如使用宏在编译时展开循环,这样可以轻松修改。
我想象的是这样的:
#define LOOP_N_TIMES(N, CODE) <insert magic here>
为了让我可以用以下代码替换 for (int i = 0; i < N, ++i) { do_stuff(); }
:
#define INNER_LOOP_COUNT 4
LOOP_N_TIMES(INNER_LOOP_COUNT, do_stuff();)
它会展开成:
do_stuff(); do_stuff(); do_stuff(); do_stuff();
由于C预处理器对我来说大部分时间还是个谜,所以我不知道如何完成这个任务,但我知道一定是可以完成的,因为Boost似乎有一个BOOST_PP_REPEAT
宏。不幸的是,我不能在这个项目中使用Boost。
BOOST_PP_REPEAT
的源代码,它似乎与大多数提出的解决方案差不多。我希望有一个更通用的解决方案,但我想这是不可能的,因为你不能编写递归宏... - Karsten