lnk*_*nk3 8 c recursion gcc return windows-subsystem-for-linux
我编写了一个递归函数,用于查找数组中的最小数,效果很好。
/*01*/ int minimo(int array[], int n)
/*02*/ {
/*03*/ static int min = 0;
/*04*/
/*05*/ if (n == N)
/*06*/ {
/*07*/ return array[n-1];
/*08*/ }
/*09*/ else
/*10*/ {
/*11*/ min = minimo(array, n+1);
/*12*/ if(array[n]<min){
/*13*/ min = array[n];
/*14*/ }
/*15*/ }
/*16*/ }
Run Code Online (Sandbox Code Playgroud)
唯一的问题是它不应该工作,因为它不会将“min”返回给调用者......
int main()
{
//Var
int array[N] = {10, 2, 5, 1, 7};
printf("Min: %d\n", minimo(array, 0));
}
Run Code Online (Sandbox Code Playgroud)
我的担忧实际上是一个问题,但不是在我的机器上,该功能可以正常工作;这是我朋友的笔记本电脑和 IDE 上的一个问题,我尝试在朋友的 Macbook 上复制到 XCode,但如果“return min;”这一行就无法工作。未在函数末尾添加。
在第 15-16 行之间,我必须添加 return min;
/*15*/ }
return min;
/*16*/ }
Run Code Online (Sandbox Code Playgroud)
我的问题如下:
这是我的第一篇文章,如果我违反了任何论坛规则,请多多包涵。
我的担忧实际上是一个问题,但不是在我的机器上,该功能可以正常工作;这是我朋友的笔记本电脑和 IDE 上的一个问题,我尝试在朋友的 Macbook 上复制到 XCode,但如果“return min;”这一行就无法工作。未在函数末尾添加。
未定义行为的典型例子。在一台机器上工作,但不能在另一台机器上工作。白天有效,夜间无效。适用于一个编译器但不适用于另一个编译器。当您调用未定义的行为时,C 标准对代码的行为方式没有任何要求。
如果到达终止函数的 },并且调用者使用了函数调用的值,则行为未定义。
在您的代码中,这正是发生的事情。当您尝试打印返回值时,您会调用未定义的行为。
与许多人认为的相反,完全允许在非 void 函数中省略 return 语句。如果您尝试使用不存在的返回值,它只会变成未定义的行为。
为避免这种情况,请始终使用至少-Wall -Wextra.
| 归档时间: |
|
| 查看次数: |
132 次 |
| 最近记录: |