if 조건2개 앤드 시에 2번째 조건 검사
글쓴이: perseuse / 작성시간: 금, 2023/05/26 - 5:58오후
만약 아래와 같은 if 문에서 2번째 조건을 검사 할까요?
---------------------------------
int a = 0;
if( (a == 1) && (b > ++c) )
{
...
}
---------------------------------
첫 번째 a 검사에서 거짓으로 판단 했을 때
두 번째 조건을 검사할까요? 한다면 ++c 는 수행 될까요?
그리고..컴파일러에 따라서 첫조건이 거짓이더라도..두번째 조건을 검사한다던데..그럴수도 있을지..
첫 조건이 거짓인데 두번빼 조건을 검사하면 ++c 가 수행이 되니까...
개발한 의도대로 안될수도 있지 않을까요?
Forums:
short-circuit 때문에 두번째 조건 판단안할
short-circuit 때문에 두번째 조건 판단안할 겁니다(100% 장담 못하는 건 세상에는 정말 많은 컴파일러가 있기에....). 이런 문제를 방지하기 위해 한 문장에는 하나의 효과만 발생되도록 코딩하는 것을 추천드립니다.
보다는
가 좋은 스타일입니다.
...
C/C++은 (A && B)를 만났을 때 무조건 먼저 A의 값을 계산해서 참일 경우에만 B를 수행합니다. 표준으로 보장되어 있습니다. 따라서 위의 코드에서 a가 0이라면 (b > ++c)는 수행되지 않습니다.
만약 이 상황에서 ++c를 수행하는 컴파일러가 있다면 버그입니다. 아니면 표준을 지키지 않는 거지같은 시스템이거나... (그말이 그말인가...)
안합니다
결론부터 말하지만 안합니다
C와 C문법을 참고해서 만든 C++ C# JAVA등등은 안합니다
PHP는 테스트 안해봤는데 안할겁니다..
&& 뿐만 아니라 A||B도 A가 참이면 B를 실행 안합니다
혹시 A가 참(혹은 거짓) 이라도 B를 실행시키고 싶으면
if (A & B) 혹은 if (A | B) 로 하면 됩니다
C PROGRAMMING LANGUAGE 라는 책에서 배운 내용인데 이 사실에 너무 충격 먹어서
개인적으로 좋은 프로그래밍책의 판단 기준으로 논리연산에 & | 가 한번 써진게 있냐 없냐로 보고 있습니다..
엄청난 편견이지만..
&|를 한번만 쓰는거 비트연산 말고 설명한 책은 거의 없습니다 국내도서 외국도서 통틀어도
--=--=--=--=--=--=--=--=--=--=--=--=--=--=--=--
N년째 초보입니다
왜냐하면 논리연산이 아니니까요 ~_~
왜냐하면 논리연산이 아니니까요 ~_~
C/C++언어를 기준으로...
&&, ||는 논리 연산자(Logical AND/OR operator)
&, |는 비트 연산자(Bitwise AND/OR operator).
논리 연산자는 반드시 왼쪽 피연산자를 먼저 평가하고, 꼭 필요한 경우에만 오른쪽 피연산자를 평가하는데
앞서 다른 분들이 답변 주셨듯 단축 평가(short-circuit evaluation)라고 부릅니다.
이거 설명 안 해 주는 C/C++ 교본은 거칠게 말하자면 C/C++ 교본이라고 볼 수가 없어요.
======
비트 AND/OR 연산을 단축 평가 없는 논리연산으로 쓰는 게 가능하기는 한데
비트 연산은 bool을 받아서 bool을 내놓는 연산이 아니라는 점 유의하는 것이 좋겠습니다.
간단히 예를 들어서, 2 && 1은 true이지만 2 & 1은 0이지요.
댓글 달기