if(1 | | !Foo()를 사용하는 이유가 있습니까?
레거시 코드를 읽었습니다.
if ( 1 || !Foo() )
다음 사항을 기입하지 않는 이유가 있습니까?
if ( !Foo() )
그 둘은 같지 않다.첫 번째는 절대 평가하지 않을 것이다.Foo()
왜냐하면1
짧은 시간 내에||
.
왜 그랬는지 - 아마 누군가가 강제로 침입하고 싶었을 겁니다then
디버깅을 위해 브랜치를 설정하고 그대로 두었습니다.소스 제어 전에 작성된 것일 수도 있습니다. 따라서 코드를 잃어버리는 것을 원치 않고 일단 무시해 두었습니다.
if (1 || !Foo() )
항상 만족할 것입니다. !Foo()
단기간의 평가로 인해 도달조차 할 수 없을 것이다.
이것은, 다음의 코드가, 다음의 코드인 것을 확인하고 싶은 경우에 발생합니다.if
실행되지만 디버깅을 위해 실제 조건을 삭제하지는 않을 것입니다.
도움이 되는 추가 정보:
if(a && b)
- 만약a
이false
,b
체크되지 않습니다.if(a && b)
- 만약a
이true
,b
확인될 것이다. 왜냐하면 만약 그것이false
표현은 다음과 같습니다.false
.if(a || b)
- 만약a
이true
,b
체크되지 않습니다.왜냐하면 이것은true
어쨌든.if(a || b)
- 만약a
이false
,b
체크됩니다.b
이true
그럼 그렇게 될 거야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
'programing' 카테고리의 다른 글
Vue SSR 응용 프로그램에서 Paper.js 사용 (0) | 2022.08.07 |
---|---|
구성 요소 라이브러리의 Vuex 저장소 (0) | 2022.08.07 |
vue 구성 요소의 vuex 저장소에서 응답 에이잭스를 가져오려면 어떻게 해야 합니까? (0) | 2022.08.07 |
Vue 표 2 - 커스텀필터 (0) | 2022.08.07 |
node_modules에서 동적 Vue 이미지 src 바인딩 (0) | 2022.08.07 |