C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[58824] AND 연산자에서 좌항이 false 이면 우항은 계산을 아예 안 합니다.
아제나 [azena] 1239 읽음    2009-10-20 12:36
AND 연산자에서 좌항이 false 이면 우항은 계산을 아예 안 합니다.

계산해봤자 결과가 false라는 것은 명백한 사실이니까요.

C언어의 옵티마이징 기능 때문일거예요.

이거 끄는 옵션이 어딘가에 있을텐데요.. 없나? -_-+

그래서 우리가 보통 많이 쓰는 이런 문법이 가능한거죠.

char *str = NULL;

if( rand()%2 == 0 ) str = "YaHoo!";

if( str && str++ )
{
  printf( "%s", str );
}


rand()값이 2의 배수가 아닐 경우에는 str에 NULL이 들어가 있으므로 str++까지 계산하게되면 무조건 Access violation 이죠.

연산자 우선 순위가 비교 연산자에서는 결합시 좌항 먼저 계산하도록 되어 있습니다.

질문쟁이 님이 쓰신 글 :
:
include <stdio.h>

:
: int main(void)
: {
: int a = 0;
: int b = 2;
: int result;
:
: result = a && ++b
:
: printf("a = %d, b= %d, result= %d\n", a, b, result);
:
: return 0;
: }
:
:  위와같이 프로그램을 짜면...
: a = 0, b = 2, result = 0
: 이라는 값이 출력되는데요.
: 연산자 우선순위상 ++b가 먼저 실행되어야 하는거 아닌가요?
: (a && (++b))
: 이렇게 해도 결과는 같게 나오는군요.
: 답변 부탁드립니다.

+ -

관련 글 리스트
58796 아주 기초적인 질문 하나 할께요. 질문쟁이 1001 2009/10/18
58824     AND 연산자에서 좌항이 false 이면 우항은 계산을 아예 안 합니다. 아제나 1239 2009/10/20
58803     Re:아주 기초적인 질문 하나 할께요. 넘초보 809 2009/10/19
58807         Re:Re:아주 기초적인 질문 하나 할께요. 질문쟁이 820 2009/10/19
58810             Re:Re:Re:아주 기초적인 질문 하나 할께요. 넘초보 969 2009/10/19
58799     Re:아주 기초적인 질문 하나 할께요. Kenzuro 948 2009/10/18
58800         Re:Re:아주 기초적인 질문 하나 할께요. 질문쟁이 931 2009/10/18
58801             헷갈리네요 이경문 926 2009/10/19
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.