BASIC中函数的缺省返回值

时间:2013-09-23 17:49:59

标签: basic

以下是BASIC中的示例程序。有人能告诉我,如果标记的条件不正确,这个函数会返回什么?我必须将程序移植到C ++并需要了解它。我没有基本的知识 - 请用简单的问题来承担。

FUNCTION CheckPoss (u)
  tot = tot + 1
  f = 0
  SELECT CASE u
    CASE 2
      f = f + CheckIntersection(1, 3, 2, 1)     'A
    CASE 3
      f = f + CheckIntersection(2, 3, 3, 1)     'B
  END SELECT 
  IF f = 0 THEN        <============== This condition if true, 
    CheckPoss = 1      <==============     then return value is 1 
    IF u = 9 THEN
      PrintSolution
    END IF
  END IF
END FUNCTION

2 个答案:

答案 0 :(得分:2)

这是错误编程的一个很好的例子。首先,在此函数中更改了一些未知的全局变量。 “tot = tot + 1”!第二行“F”是另一个未知的全局变量,分配为“0”。或者这是唯一使用此变量的地方?在这种情况下,它是在此隐式声明的变体。使用昏暗来声明它。这样做是基本合法的。 Globals应作为参数传递给函数,如下所示:

function CheckPoss(u as integer, tot as integer) as integer
dim f as integer
f=0

这完全是关于良好实践,因此输入是清晰的,输出是清晰的,所有变量赋值都应该通过传递给函数的参数。 也没有声明返回类型。这是视觉基础吗?还是一些较旧的基础?无论如何,返回类型是视觉基础的变体。较旧的基本类型是整数类型。

如果不满足条件,此函数的输出很可能为零!在代码中也应该清楚这一点,并不清楚它是什么,我理解你为什么要问。我很惊讶这段代码来自一个工作程序。

祝你的项目好运!

答案 1 :(得分:1)

我不确切知道这个功能是做什么的。

在VB.net上,该函数遵循以下结构:

Public function CheckPoss(Byval u as integer)
     ...       ' Just commands
     return u  ' Or other variable
end function

如果不存在'return'命令,则返回的函数将为'null'字符。

在C上,功能将是:

int CheckPoss(int u){
  tot++; // Increment tot variable (need be declared)
  int f = 0;
  switch(u){
      case 2:
            f += CheckIntersection(1, 3, 2, 1); // A
            break;
      case 3:
            f += CheckIntersection(2, 3, 3, 1); // B
            break;
  }
  if (f == 0){
        if (u == 9){
             PrintSolution();
        }
        return 1;
  }
}

return命令需要是此函数的最后一个命令。在f!= 0的情况下,函数必须返回垃圾(某些值或字符)。

我的建议是:
int CheckPoss(int u){
  tot++; // I think that this must count how times you call this function
  int f;
  if(u == 2){
    f = CheckIntersection(1, 3, 2, 1); // A
  }else if(u == 3){
    f = CheckIntersection(2, 3, 3, 1); // B
  }else{
    f = 1; // Case else
  }
  if (f == 0){
    if (u == 9)
      PrintSolution();
    return 1;
  }
}