[초보질문] if문 기초~

프로그래밍 일반에 관한 포럼입니다.

Moderator: 류광

Locked
비회원

[초보질문] if문 기초~

Post by 비회원 »

if( 조건1 && 조건2 )
{

}

일케 있을때

조건1, 조건2 둘중 하나라도 거짓이면 그냥 빠져나가잖아요

스택구조라 보통 뒤에놈부터 연산되는경우를 많이 봤는데

저런 경우에서도 뒤에서부터 조건을 먼저 검사하나요?

조건2가 참이면 조건1를 검사하고 조건1도 참이면 중괄호 안으로 들어가는건가요^^

if(조건1 && 조건2 && 조건3 && 조건4) 머 일케 많은구조라면(일케하면안되겠지만^^)
순서에따라 퍼포먼스에도 영향을 미치겠네요^^

답변좀^^
etds
Posts: 194
Joined: 2004-07-20 11:56
Location: (주) 애니파크

앞에서부터 합니다.

Post by etds »

앞에서 조건에 안 맞으면 바로 나갑니다.
albertyun
Posts: 5
Joined: 2004-11-15 17:07

Post by albertyun »

Short Circuit
chaen
Posts: 202
Joined: 2001-08-28 09:00
Location: Zepetto
Contact:

옛날 생각이...

Post by chaen »

예전에... 대략 5년전 쯤에 있었던 일인데...

Code: Select all

if( pObj != NULL && pObj->IsAlive() )
{
    // ....
}
대략 이런 코드였는데...
pObj 가 NULL인 경우, 어떤 컴파일러에서는 첫번째 조건만 검사하고 넘어가서 괜찮았고,
어떤 컴파일러는 두번째 조건까지 계산해서 그 다음에 && 연산을 하려다가 에러가 났었다는...
요즘도 그런 컴파일러가 있를려나? -,.-;
궁금이
Posts: 237
Joined: 2005-01-19 11:06
Location: ProjectS

Re: 옛날 생각이...

Post by 궁금이 »

chaen wrote:예전에... 대략 5년전 쯤에 있었던 일인데...

Code: Select all

if( pObj != NULL && pObj->IsAlive() )
{
    // ....
}
대략 이런 코드였는데...
pObj 가 NULL인 경우, 어떤 컴파일러에서는 첫번째 조건만 검사하고 넘어가서 괜찮았고,
어떤 컴파일러는 두번째 조건까지 계산해서 그 다음에 && 연산을 하려다가 에러가 났었다는...
요즘도 그런 컴파일러가 있를려나? -,.-;

전.. 혹시 에러날까 두려워.. 포인터 널체크하고나서.. 그 안에서 다시 if 검사합니다..
if가 중첩되서 좀 보기 싫지만.. 그래도 왠지 모르게 걱정되서 ㅡㅡ;;
chadr
Posts: 980
Joined: 2003-06-01 12:28
Location: 모대학
Contact:

Re: 옛날 생각이...

Post by chadr »

chaen wrote:예전에... 대략 5년전 쯤에 있었던 일인데...

Code: Select all

if( pObj != NULL && pObj->IsAlive() )
{
    // ....
}
대략 이런 코드였는데...
pObj 가 NULL인 경우, 어떤 컴파일러에서는 첫번째 조건만 검사하고 넘어가서 괜찮았고,
어떤 컴파일러는 두번째 조건까지 계산해서 그 다음에 && 연산을 하려다가 에러가 났었다는...
요즘도 그런 컴파일러가 있를려나? -,.-;
컴파일러마다 다른걸로 알고 있습니다..

그런데 vc에서는 첫번째조건이 거짓이면 두번째 조건을 검사하지 않더군요..

gcc는 어떤지 모르겠네요..
seeper
Posts: 1483
Joined: 2003-06-06 23:19
Contact:

Re: 옛날 생각이...

Post by seeper »

gcc도 검사 않합니다.
제가 gcc랑 vc를 사용하는데...
아래와 같이 즐겨 씁니다.

Code: Select all

if(pObj && pObj->IsAlive() )
{
    // ....
}
Testors
Posts: 557
Joined: 2003-07-26 00:34
Location: (주)nFlavor
Contact:

Post by Testors »

Programming Language C++ wrote:5.14 - Logical AND operator [expr.log.and]
logical-and-expression:
inclusive-or-expression
logical-and-expression && inclusive-or-expression

-1- The && operator groups left-to-right. The operands are both implicitly converted to type bool (clause conv). The result is true if both operands are true and false otherwise. Unlike &, && guarantees left-to-right evaluation: the second operand is not evaluated if the first operand is false.


5.15 - Logical OR operator [expr.log.or]
logical-or-expression:
logical-and-expression
logical-or-expression || logical-and-expression

-1- The || operator groups left-to-right. The operands are both implicitly converted to bool (clause conv). It returns true if either of its operands is true, and false otherwise. Unlike |, || guarantees left-to-right evaluation; moreover, the second operand is not evaluated if the first operand evaluates to true.
플머/모델러/애니메이터 구해염 **현역/보충역 병특가능** / http://testors.net/
Locked