The boiler function without return'a returns the correct value



  • Working in QT 6.2 I've got a program that counts the area of an arbitrary, simple multiangle. Before the counting, I'm checking a multiangle at the crossroads.

    if(!cross(polygon, n))
    {
        double S = square(polygon,n);
        if(!(qIsInf(S)))
        {
            ui->l_Sq->setText("Площадь: " + QString::number(S));
        }
        else
        {
            warning("Многоугольник слишком большой(");
        }
    }
    else
    {
        warning("Я умею работать только с простыми многоугольниками(");
    }
    

    That's why I'm calling a buoy line. not_cross()

    bool cross(double **polygon, int n = 0) // Ф-ция  проверки на пересечение сторон многоугольника
    {
        bool not_cross = true;
        double x1,x2,x3,x4;
        double y1,y2,y3,y4;
        double v1,v2,v3,v4;
    
    for (int i=0; i<n&&not_cross; i++)
    {
        int k = (i+1)%n;
        x1 = polygon[i][0]; x2 = polygon[k][0];
        y1 = polygon[i][1]; y2 = polygon[k][1];
        for (int j = 0; j<n&&not_cross; j++)
        {
            int m = (i+j)%n;
            int v = (m+1)%n;
            if(abs(i-m) <= 1)
                continue;
            x3 = polygon[m][0]; x4 = polygon[v][0];
            y3 = polygon[m][1]; y4 = polygon[v][1];
    
            v1 = (x4-x3)*(y1-y3)-(y4-y3)*(x1-x3);
            v2 = (x4-x3)*(y2-y3)-(y4-y3)*(x2-x3);
            v3 = (x2-x1)*(y3-y1)-(y2-y1)*(x3-x1);
            v4 = (x2-x1)*(y4-y1)-(y2-y1)*(x4-x1);
    
            not_cross = !((v1*v2<0) && (v3*v4<0)) && not_cross;
    
        }
    }
    

    }

    As you can see, this sentence does not exist. return♪ However, it still returns correct values. I mean, if the figure crosses, she'll come back. trueif not intersected, falseI think I've tested the program enough to avoid coincidences.
    What's that got to do with it? Does the compiler think it's worth it? not_cross? If you finish the return, you'll have to write. return !not_cross(Yeah, I've got the code. I'm sorry, I was in a hurry.



  • Technically, function without return, which does not voidin other words, a function that reaches the last brackets without meeting on its way return (что-то)It does. Undetermined behaviour

    Undetermined conduct You may be the one you're expecting, but the program is incorrect.


Log in to reply
 

Suggested Topics

  • 2
  • 2
  • 2
  • 2
  • 2
  • 2
  • 2
  • 2
  • 2
  • 2
  • 2
  • 2
  • 2
  • 2
  • 2