그래서 n 번째 피보나치 수를 반환하는 함수를 작성했지만 실제로 결과를 반환하는 것을 잊었습니다. "컨트롤이 무효가 아닌 함수의 끝에 도달 함"경고를 받았지만 코드가 제대로 실행되고 올바른 결과를 반환했습니다. 왜 그런 겁니까? C는 "result"를 반환해야한다는 것을 어떻게 알 수 있습니까?
int fib (int n);
int main(int argc, char** argv) {
printf("%d", fib(10));
}
int fib (int n){
if (n == 1){
return 1;
}
if (n == 0){
return 0
}
fib(n-2) + fib(n-1)
}
이것을 돌려 주었다
55
나는 추가하려고 노력했다
int j = n+1
함수의 마지막 줄로 이동 한 다음 실제로 256이 아닌 2를 반환했습니다. 이것은 버그입니까, 아니면 c가 이와 같은 것을 어떻게 읽습니까?
명령문 void
없이 비 함수 의 끝에 도달 return
하면 정의되지 않은 동작이 호출됩니다. 예상되는 결과를 얻는 것은 일반적으로 luck 이라고하는 정의되지 않은 동작의 한 형태입니다 . 그건 그렇고, 256
당신이 기대했던 것일 수 있지만 정확 하지 않습니다 .
가능한 설명은 다음과 같습니다. 함수에 의해 계산되고 일반적으로 반환 값을 포함하는 레지스터에 저장된 마지막 값이 예상 결과입니다.
물론 당신은 이것에 의존하거나 기 대해서는 안됩니다.
이것은 컴파일러 경고 사용의 좋은 예입니다. 무시하지 마십시오. 항상 더 많은 컴파일러 경고를 켜고 코드를 수정하십시오. gcc -Wall -W
또는 clang -Weverything
많은 어리석은 실수를 발견하고 디버깅 시간을 절약 할 수 있습니다.
다음은 몇 가지 다른 문제입니다.
<stdio.h>
unsigned long long
하지만 아마도 더 작은 유형 만 반환합니다.int
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다