programing

if(1 | | !Foo()를 사용하는 이유가 있습니까?

itsource 2022. 8. 7. 17:31
반응형

if(1 | | !Foo()를 사용하는 이유가 있습니까?

레거시 코드를 읽었습니다.

if ( 1 || !Foo() )

다음 사항을 기입하지 않는 이유가 있습니까?

if ( !Foo() )

그 둘은 같지 않다.첫 번째는 절대 평가하지 않을 것이다.Foo()왜냐하면1짧은 시간 내에||.

왜 그랬는지 - 아마 누군가가 강제로 침입하고 싶었을 겁니다then디버깅을 위해 브랜치를 설정하고 그대로 두었습니다.소스 제어 전에 작성된 것일 수도 있습니다. 따라서 코드를 잃어버리는 것을 원치 않고 일단 무시해 두었습니다.

if (1 || !Foo() )항상 만족할 것입니다. !Foo()단기간의 평가로 인해 도달조차 할 수 없을 것이다.

이것은, 다음의 코드가, 다음의 코드인 것을 확인하고 싶은 경우에 발생합니다.if실행되지만 디버깅을 위해 실제 조건을 삭제하지는 않을 것입니다.

도움이 되는 추가 정보:

  • if(a && b)- 만약afalse,b체크되지 않습니다.
  • if(a && b)- 만약atrue,b확인될 것이다. 왜냐하면 만약 그것이false표현은 다음과 같습니다.false.
  • if(a || b)- 만약atrue,b체크되지 않습니다.왜냐하면 이것은true어쨌든.
  • if(a || b)- 만약afalse,b체크됩니다.btrue그럼 그렇게 될 거야true.

이 목적을 위해 매크로를 사용하는 것이 좋습니다.DEBUG_ON 1프로그래머의 의미를 이해하기 쉬워지고 코드에 매직넘버가 들어가지 않게 됩니다(@grigeshchauhan).

1 || condition

항상 진실입니다.condition사실이든 아니든이 경우,condition평가조차 받지 못하고 있습니다.다음 코드:

int c = 5;
if (1 || c++){}
printf("%d", c);

출력5부터c증가하지 않습니다.다만,1로.0,그c++실제로 호출되어 출력됩니다.6.


true로 평가되는 조건이 거의 충족되지 않을 때 호출되는 코드 일부를 테스트하는 경우 일반적으로 이 방법을 사용합니다.

if (1 || condition ) {
    // code I want to test
}

이쪽입니다.condition평가되지 않기 때문에// code I want to test항상 호출됩니다.단, 다음과 같은 경우는 전혀 다릅니다.

if (condition) { ...

이 문장이란, 이 문장이condition실제로 평가됩니다(고객님의 경우).Foo호출됩니다.)

질문에 올바르게 대답했습니다.차이는 오른쪽 또는 동작이 단락되어 있는 것입니다.이것은 if 블록에 강제로 엔트리를 입력하기 위한 디버깅코드임을 나타냅니다.

그러나 베스트 프랙티스를 위해 적어도 베스트 프랙티스에 대한 저의 대략적인 시도에서는 선호도를 높이기 위해 대안을 제안합니다(최상이 마지막입니다).

주의: 예를 코드화한 후, 이것은 C++ 질문입니다.예를 들어 C#입니다.통역을 해 주셨으면 합니다.필요한 사람 있으면 댓글로 올려주세요.

인라인 코멘트:

if (1 /*condition*/) //temporary debug

줄바꿈 주석:

//if(condition)
if(true) //temporary debug

이름 표시 함수

//in some general-use container
bool ForceConditionForDebug(bool forcedResult, string IgnoredResult)
{
      #if DEBUG
          Debug.WriteLine(
              string.Format(
                  "Conditional {0} forced to {1} for debug purposes",
                  IgnoredResult,
                  forcedResult));
          return forcedResult;
      #else
          #if ALLOW_DEBUG_CODE_IN_RELEASE
              return forcedResult;
          #else
              throw new ApplicationException("Debug code detected in release mode");
          #endif
      #endif
}

//Where used
if(ForceConditionForDebug(true, "condition"))...

//Our case
if(ForceConditionForDebug(true, "!Foo()"))...

또한 매우 강력한 솔루션을 원하는 경우 ForceConditionForDebug라는 체크인된 코드를 거부하는 저장소 규칙을 소스 제어에 추가할 수 있습니다.이 코드는 의도를 전달하지 않기 때문에 절대 그렇게 쓰여서는 안 됩니다.체크인(또는 체크인 허용)해서는 안 됩니다(소스 컨트롤).안전 점검)그리고 현재 형태로는 절대로 생산에서 실행되도록 해서는 안 됩니다.

언급URL : https://stackoverflow.com/questions/19292318/is-there-any-reason-for-using-if1-foo

반응형