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();