Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何使宏在for循环中生成代码?_C++_C_Macros_C Preprocessor - Fatal编程技术网

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

C++ 如何使宏在for循环中生成代码?,c++,c,macros,c-preprocessor,C++,C,Macros,C Preprocessor,我在代码审查中注意到以下代码: for (int i = 0; i < 50; ++i) { switch(i) { case 0: return f1(); case 1: return f2(); ... case 49: return f50(); } } for(int i=0;i宏没有任何CPP宏来生成,但是C或C++中的常用方法是用其他东西生成东西。例如,您可以用Python、Ocaml或AWK编写一

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

for (int i = 0; i < 50; ++i) {
  switch(i) {
    case 0:
      return f1();
    case 1:
      return f2();
    ...
    case 49:
      return f50();
  }
}
for(int i=0;i<50;++i){
开关(一){
案例0:
返回f1();
案例1:
返回f2();
...
案例49:
返回f50();
}
}
我想知道是否有任何优雅的方法,例如使用宏来简化代码(将其减少到几行):


谢谢。

< P>宏没有任何CPP宏来生成,但是C或C++中的常用方法是用其他东西生成东西。例如,您可以用Python、Ocaml或AWK编写一些生成代码的脚本,这样做是常见的做法(只需在
Makefile
中添加几行即可)。您还可以使用其他预处理器,例如或

for (int i = 0; i < 50; ++i) { switch(i) { case 0: return f1(); ...
不需要宏。

这会不会简化为调用
f1()
并立即返回而不执行任何其他分支?看起来像是XY问题。最好的方法是使用函数指针表,而不是宏。你真的有五十个方法的名称像
f1
等等吗?为什么不按顺序运行它们呢?循环的作用是什么?正如Daniel已经说过的,它将返回f1()的结果,并且不会在其他49个函数上循环…示例代码正确吗?宏几乎总是错误的解决方案。顺便说一句,原始代码中没有错误,只有我在这里发布的简化代码有问题。谢谢你指点out@TMS老实说,我不太明白你当时为什么接受这个答案。:-)@melpomene,我不认为我应该更正我的帖子,因为帖子中已经有很多关于这个bug的讨论了。如果我仍然想正确地问这个问题,我最好重新开始。这个答案确实简化了代码,所以被接受了。哈哈,我想了几分钟。美好的
return f1();