과제: C++ 코드에서 오류를 발견할 수 있습니까?

PVS-Studio 개발자들이 재미있는 퀴즈를 만들었습니다. 코드 조각에서 버그를 빠르게 찾으십시오. 오류를 발견하면 클릭하십시오.



코드 분석기는 끊임없이 오류를 검색합니다. 눈에 잘 띄지 않는 것들도 찾을 수 있습니다. PVS-Studio가 오류를 발견한 여러 코드 조각을 선택했습니다. 모든 조각은 open-source projects에서 가져온 것입니다.

우리는 당신이 우리의 분석기와 경쟁하고 이러한 오류를 직접 찾을 것을 권장합니다! 10개의 코드 조각이 표시됩니다. 1분 안에 오류를 찾으면 1점을 얻습니다.

1분 제한은 일부러 만든 것입니다. 그렇지 않으면 모든 오류를 확실히 찾을 수 있습니다. 코드 조각이 짧습니다. 어쨌든, 이 퀴즈를 게임으로 다루세요. 프로그래밍 기술에 대한 실제 테스트가 아닙니다. :)

오류를 찾으면 마우스로 강조 표시하고 "답변"을 클릭하십시오. 때로는 코드에 오류가 있는 여러 위치가 있습니다. 그 중 하나를 강조 표시하면 답이 정확합니다. 예를 들어 설명하겠습니다.

case FuriHalSubGhzPreset2FSKDev476Async:
  preset_name = "FuriHalSubGhzPreset2FSKDev476Async";
  break;
  FURI_LOG_E(SUBGHZ_PARSER_TAG, "Unknown preset");
default:


이 코드 조각은 FlipperZero 프로젝트에서 가져온 것입니다. PVS-Studio 분석기는 코드의 일부가 절대 실행되지 않는다고 경고합니다. V779 [CWE-561, CERT-MSC12-C] 연결할 수 없는 코드가 감지되었습니다. 오류가 있을 수 있습니다. subghz_i.c 44

개발자는 아마도 서두르고 break 연산자 다음에 로깅 매크로를 사용했을 것입니다. 또는 이것은 실패한 리팩토링의 결과입니다. 어쨌든 여기서 오류는 명백합니다. 하지만 무엇을 강조해야 할까요?

한편으로는 응답으로 중단 연산자를 선택할 수 있습니다. FURI_LOG_E 앞에 있으며 switch 연산자 실행을 중단합니다. 그래서 문제는 여기에 있습니다.

반면에 로깅 매크로를 선택할 수 있습니다. 도달할 수 없는 코드입니다.

그렇다면 정답은 무엇입니까? 이것은 쉬워요. 이 경우 break 연산자 또는 FURI_LOG_E 매크로를 강조 표시하는 것이 정답이 됩니다.

이제 규칙이 명확하다고 생각합니다. 행운을 빕니다: play the quiz .

이 퀴즈를 팀원들과 공유하는 것을 잊지 마세요! 즐거운 시간 보내시고 버그 없는 코드를 만드시기 바랍니다!

좋은 웹페이지 즐겨찾기