문제

이것은 일반적인 프로그래밍이지만 차이가있는 경우 Objective-C를 사용하고 있습니다. 값을 반환하고 몇 가지 작업을 수행하는 메소드가 있다고 가정하지만, 반환하는 값에 대해서는 신경 쓰지 않으며, 그 일에 대해서만 신경 쓰지 않습니다. 메소드가 마치 무효 인 것처럼 호출 하시겠습니까? 아니면 결과를 변수로 배치 한 다음 삭제하거나 잊어 버리셨습니까? 이 상황이 있으면 무엇을 할 것인지 의견을 말하십시오.

도움이 되었습니까?

해결책

이것의 일반적인 예는 int를 반환하는 printf입니다. 그러나 당신은 이것을 거의 볼 수 없습니다.

int val = printf("Hello World");

다른 팁

네, 그 방법을 무효 인 것처럼 부르십시오. 당신은 아마 그것을 알아 차리지 않고 항상 그것을 할 것입니다. 할당 연산자 '='는 실제로 값을 반환하지만 거의 사용되지 않습니다.

환경 (언어, 도구, 코딩 표준, ...)에 따라 다릅니다.

예를 들어 C에서는 값을 사용하지 않고 함수를 호출 할 수 있습니다. int를 반환하는 printf와 같은 일부 기능을 사용하면 항상 완료됩니다.

때로는 값을 사용하지 않으면 경고가 발생합니다. 변수에 값을 할당 한 다음 사용하지 않으면 사용하지 않은 변수에 대한 또 다른 경고가 발생합니다. 이 경우 솔루션은 통화를 (void)로 접두사하여 결과를 공극으로 캐스팅하는 것입니다.

(void) my_function_returning_a_value_i_want_to_ignore().

실제로 여기에는 두 가지 별도의 문제가 있습니다.

  1. 반환 된 가치에 관심을 가져야합니까?
  2. 사용하지 않을 변수에 할당해야합니까?

#2에 대한 답변은 "아니오"입니다. 물론, 불법적 인 언어로 작업하지 않는 한 (초기 터보 파스칼이 떠오 릅니다). 변수를 버리기 위해 변수를 정의 할 필요는 없습니다.

첫 번째 부분은 그렇게 쉽지 않습니다. 일반적으로 이유 값이 반환됩니다. Idempotent 함수 결과는 기능의 유일한 목적입니다. 비 학기의 경우 일반적으로 작업이 정상적으로 완료되었는지 여부를 나타내는 일종의 반환 코드를 나타냅니다. 물론 예외가 있습니다 방법 체인.

이것이 .NET (예를 들어)에서 일반적이면 코드 브레이킹에 문제가있을 수 있습니다. CQS.

무시하는 값을 반환하는 함수를 호출 할 때는 일반적으로 동작을 확인하기 위해 테스트에서 수행하기 때문입니다. 다음은 C#의 예입니다.

    [Fact]
    public void StatService_should_call_StatValueRepository_for_GetPercentageValues()
    {
        var statValueRepository = new Mock<IStatValueRepository>();

        new StatService(null, statValueRepository.Object).GetValuesOf<PercentageStatValue>();

        statValueRepository.Verify(x => x.GetStatValues());
    }

나는 실제로 반환 유형에 관심이 없으며, 메소드가 가짜 객체에 호출되었는지 확인하고 싶습니다.

C에서는 매우 일반적이지만, 그렇게해도 괜찮은 곳과 실제로는 그렇지 않은 다른 곳이 있습니다. 이후 버전의 GCC는 다음과 같습니다 기능 속성 반환 값을 확인하지 않고 함수를 사용할 때 경고를받을 수 있습니다.

그만큼 warn_unused_result 속성 이이 속성을 가진 함수의 발신자가 리턴 값을 사용하지 않으면 경고를 방출합니다. 결과를 확인하지 않으면 보안 문제이거나 항상 Realloc과 같은 버그가있는 기능에 유용합니다.

     int fn () __attribute__ ((warn_unused_result));
     int foo ()
     {
       if (fn () < 0) return -1;
       fn ();
       return 0;
     }

5 행에 경고를합니다.

지난번에 이것을 사용했을 때 생성 된 경고를 끄는 방법이 없었으며, 이는 수정하고 싶지 않은 3 자 코드를 컴파일 할 때 문제가 발생합니다. 또한 물론 사용자가 실제로 반환 된 값과 현명한 일을하는지 확인할 방법이 없습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top