source

"제어가 비공수 기능의 끝에 도달한다"는 것은 무엇을 의미합니까?

ittop 2023. 10. 4. 22:59
반응형

"제어가 비공수 기능의 끝에 도달한다"는 것은 무엇을 의미합니까?

이 이진 검색 알고리즘에서 이상한 컴파일러 오류가 계속 발생하고 있습니다.나는 경고를 받습니다.control reaches end of non-void function.이것은 무엇을 의미합니까?

int binary(int val, int sorted[], int low, int high) {
    int mid = (low+high)/2;

    if(high < low)
        return -1;

    if(val < sorted[mid])
        return binary(val, sorted, low, mid-1);

    else if(val > sorted[mid])
        return binary(val, sorted, mid+1, high);

    else if(val == sorted[mid])
        return mid;
}

컴파일러는 그 코드로부터 함수가 끝에 도달하고 여전히 무언가를 반환하는지 알 수 없습니다.이 점을 분명히 하기 위해 마지막 부분을 교체합니다.else if(...)단번에else.

그 컴파일러는 그것을 알만큼 똑똑하지 않습니다.<,>,그리고.=="완전한 집합"입니다.if(val == sorted [mid]) 조건을 제거하면 중복된다는 것을 알 수 있습니다.쥐트말else return mid;"

Error image

함수가 non-void이면 함수 블록의 끝[_}]에 도달하기 전에 무언가를 반환해야 함을 의미합니다.따라서 컴파일러가 해당 코드로부터 구별할 수 없는 경우와 그렇지 않은 경우에만 문장을 제공하면 이러한 문장은 참으로 평가되어 무언가를 반환합니다.즉, 모든 조건이 거짓으로 평가되면 컨트롤이 기능 종료에 도달하고 무언가를 반환하지 않으며 이는 잘못된 것입니다.

항상 최소한의 최적화를 통해 구축해야 합니다.와 함께-O0, 컴파일러가 실행이 함수의 끝에 도달할 수 없다고 판단하기 위해 사용할 수 있는 모든 분석이 비활성화되었습니다.이것이 경고를 보는 이유입니다.당신이 사용해야 할 유일한 시간은-O0단계별 디버깅을 위한 것입니다. 보통 좋은 디버깅 접근법은 아니지만 MSVC를 시작한 대부분의 사람들이 배운 것은...

저도 같은 문제가 있었습니다.아래 제 코드는 작동하지 않았지만, 마지막 "if"를 "else"로 대체했을 때 작동합니다.오류: 비보이드 함수의 끝에 도달할 수 있습니다.

int shifted(char key_letter)
  {
        if(isupper(key_letter))
        {
            return key_letter - 'A'; 
        }

        if(islower(key_letter)   //<----------- doesn't work, replace with else

        {                                            


            return key_letter - 'a'; 
        }

  }

코드가 조건문에 관계없이 주어진 반환 유형의 값을 반환하고 있는지 확인합니다.

이 코드 조각에 같은 오류가 표시되었습니다.

int search(char arr[], int start, int end, char value)
{
    int i;
    for(i=start; i<=end; i++)
    {
        if(arr[i] == value)
            return i;
    }
}

약간의 변경 후 작업 코드입니다.

int search(char arr[], int start, int end, char value)
{
    int i;
    int index=-1;
    for(i=start; i<=end; i++)
    {
        if(arr[i] == value)
            index=i;
    }
    return index;
}

완성해야 할 기능을 찾는다는 뜻입니다.

else if(val == sorted[mid]) return mid;

if () 부분을 제거하고 코드를 수정하거나 마지막에 int를 반환하는 다른 ()를 추가합니다.

컴파일러는 당신이 제시한 조건이 최적이라는 것을 알지 못할 것입니다. 이것의 의미는 당신이 모든 경우를 다루었다는 것입니다.그래서 항상 답례문을 원합니다.따라서 다른 경우 마지막으로 변경하거나;`int binary(intval, int sorted[], int low, int high) {int mid = (low+high)/2;

if(high < low)
    return -1;

if(val < sorted[mid])
    return binary(val, sorted, low, mid-1);

else if(val > sorted[mid])
    return binary(val, sorted, mid+1, high);

else if(val == sorted[mid])
    return mid;
return 0; }`

"main" 기능이면 0을 반환하거나 intain()에서 void main()으로 변경해야 합니다.

코드 끝에 이진 함수를 추가합니다.

int binary(int val, int sorted[], int low, int high)
{ /* ... */ return 1;}

의 조건도 , ,int다 .int.

코드에 추가:

"#include < stdlib.h>"

return EXIT_SUCCESS;

main()

언급URL : https://stackoverflow.com/questions/6171500/what-does-control-reaches-end-of-non-void-function-mean

반응형