BASIC中函数的缺省返回值

Default return value of a function in BASIC

下面是BASIC中的一个示例程序。如果标记的条件不是真的,有人能告诉我这个函数返回什么吗?我必须把程序移植到C++,需要了解它。我没有基本知识-请接受简单的问题。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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


这是一个坏编程的好例子。首先,此函数中的某些未知全局变量发生了更改。"TOT=TOT+1"!第二行"f"是另一个未知的全局变量,被赋值为"0"。或者这是唯一使用这个变量的地方?在这种情况下,它是在此处隐式声明的变量。用暗号申报。这样做基本上是合法的。全局变量应作为参数传递给如下函数:

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

这都是关于良好实践的,因此输入是清晰的,输出是清晰的,所有变量赋值都应该通过传递给函数的参数进行。返回类型也未声明。这是Visual Basic吗?或者它是一些老的基础设施?无论如何,返回类型是VisualBasic的变体。旧的basic将是整数类型。

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

祝你的项目好运!


我不太清楚这个函数的作用。

在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;
  }
}