如何使宏在for循环中生成代码?

how to make a macro to generate code in a for loop?

我在代码审查中注意到以下代码:

for (int i = 0; i < 50; ++i) {
  switch(i) {
    case 0:
      return f1();
    case 1:
      return f2();
    ...
    case 49:
      return f50();
  }
}

我想知道是否有任何优雅的方法,例如使用宏来简化这段代码(将其减少到几行):

谢谢。

不能有任何 CPP 宏来生成它,但在 C 或 C++ 中用其他东西生成东西是常见的做法。例如,您可以在 Python、Ocaml 或 AWK 中简单地编写一些生成代码的脚本,并且这样做是常见的做法(您只需要在 Makefile 中添加几行即可所以)。您还可以使用其他预处理器,例如 m4 or gpp.

顺便说一句,在你的情况下,你可以考虑声明一个包含 50 个指针函数的数组,然后间接调用它们。

for (int i = 0; i < 50; ++i) {
  switch(i) {
    case 0:
      return f1();
    ...

可以减少到

return f1();

不需要宏。