【发布时间】:2020-09-10 20:27:45
【问题描述】:
我正在编写一些代码,我意识到当函数不使用参数时,我一直在向函数传递参数。只有具有功能的子功能(或子功能内的子功能等......)使用它。
实际的函数根本没有使用参数,它的唯一目的是将参数“中继”到子函数(或子子函数等)
例如:
int search(int (*board)[DIM],int search_digit,int * bestRow,int *bestCol)
{
//some code,haven't use arguments bestRow,bestCol
longest=seq_length( board,longest,search_digit,bestRow,bestCol,r,c); //sub-function
//some code,haven't use arguments bestRow,bestCol
}
int seq_length(int board[][DIM],int longest,int search_digit,int * bestRow,int *bestCol,int row,int col)
{
//some code,haven't use arguments bestRow,bestCol
longest=updateLongest_best(bestRow,bestCol,longest,seqLength,row,col); //sub-sub-function
//some code,haven't use arguments bestRow,bestCol
}
int updateLongest_best(int* bestRow,int *bestCol,int longest,int seqLength,int row,int col)
{
//finally used arguments bestRow,bestCol
}
有没有一种优雅的方式来规避冗余参数的传递?或者这只是 C 的固有部分?
【问题讨论】:
-
我会说你需要重构代码来扁平化调用树,但是没有real code就很难说了。
-
我会说,如果需要将参数传递给子函数......这不是多余的!现在,
bestRow和bestCol是search()返回的指针。真正的问题是:search()的调用者是否使用或设置了这些参数?如果是,你就完成了。 -
“显而易见”的替代方法是通过全局变量“传递”这些变量。这不是(即NOT)是个好主意——编写的代码更好。如果你有两个或更多这样的参数(如这里),你可以考虑将它们组合成一个通过指针传递的结构,这样只有一个直接参数。
-
@RobertoCaboni 你是说只要search()的调用者使用上面提到的那些参数,就没有多余的
-
@JonathanLeffler 我可以在这里使用结构,谢谢!
标签: c function parameters arguments