C 함수 부작용이 있는 기타 함수 호출
1243 단어 c
void func(void) {
retVal = thing1WithSideEffects();
if (0 == retVal) thing2WithSideEffects();
if (0 == retVal) thing3WithSideEffects()
if (0 == retVal) thing4WithSideEffects();
if (0 != retVal) return retVal;
// do other func()y stuff
}
부작용이란 시스템 상태의 변화를 가리킨다.부작용은 새로 열린 파일, 메모리 분배, TCP 연결 구축 등일 수 있습니다.일단 스타일.retVal의 테스트는 사실상 위의 줄에서 물건을 검사하기 때문에 이 코드를 읽는 것은 매우 이상하다.
비록 나는 꼬치꼬치 캐묻지만, 나는 '유다 조건' 을 싫어한다.
그러나 더 중요한 것은 어떤 호출이 실패하면 시스템이 불확실한 상태에 처하게 된다는 것이다.만약retVal이 7줄에 값이 있다면, 실패가 무엇인지 알 수 없습니다. 부작용을 취소하기 위해 청소 함수를 호출할 수 없습니다.
func()
오류가 발견된 호출 프로그램/함수는 청소를 알지 않으면 다시 호출할 수 없습니다. func()
그래, 이 정도는 어려워. 왜냐하면 너는 결국 이런 일을 당하게 될 거야.void func(void)
{
if (retVal = thing1WithSideEffects()) return retVal;
if (retVal = thing2WithSideEffects()) {
undoThing1();
return retVal;
}
if (retVal = thing3WithSideEffects()) {
undoThing2();
undoThing1();
return retVal;
}
// ad nauseum -- you get the idea
}
좀 메스꺼워요.나는 네가 마침 마감일 전에 이 모든 것을 하고 싶지 않고 일을 순조롭게 진행하려고 하지만, 우리가 작성한 코드는 왕왕 우리보다 오래 산다는 것을 완전히 이해한다.
하지만 우리는 할 수 있고 더 잘해야 한다.
Reference
이 문제에 관하여(C 함수 부작용이 있는 기타 함수 호출), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/mmi/c-functions-calling-other-functions-with-side-effects-297g텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)