| 글 쓴 이(By): diable (.호.) 날 짜 (Date): 1993년06월03일(목) 20시59분54초 KST 제 목(Title): re:short-circuit evaluation boolean 연산(&&나 or)을 할 때 일어나는 문제인데요... example 1) PASCAL에서 A, B가 boolean 값을 생성하는 expression이고 if A and B then ...이라는 문장이 있을 때 A를 계산한 값에 상관없이 B를 계산합니다. 그러나 C에서 if ( A && B ) ...이라는 문장이 있을 때(if문이 아니어도 됨, 모든 boolean 연산에서 가능함) A의 계산 결과가 0이면 B의 계산 결과에 상관없이 수식 전체( A && B )가 0이 되기 때문에 수식 B를 계산하지 않아요... OR(||)에서는 반대로 적용이 되고요... 이것을 short-circuit eveluation이라 해요. 기본적으로 C에서는 이것이 제공된다고 알고 있고요... 결국에 dirty c code의 함수 부분중 각 행은 처음 __부분만 수행이 되요... 그런데 PASCAL도 이것을 지원피求� 경우도 있어요 PC에서 쓰는 turbo pascal의 경우에는 defult로 이것을 지원하고요 OPTION 메뉴에서 COMPILER 메뉴로 가서 complete boolean eval을 on 시키면 전체를 계산하죠. 그리고 C에서는 모두 이것을 지원한다고 알고 있는데... 안 그런게 있는지 모르겠어요. 그리고 short-circuit evaluation을 하지 않으려면 어떻게 해야하는지도 잘 모르겠네요... 마지막으로 이것이 필요한 경우는 배열을 이용할 경우 조건문에서 bound를 넘어서는 첨자가 사용되는 경우를 막아줄 수 있고요 포인터에서 null pointer에 대해 연산하는 경우를 막아줄 수 있고요 마지막으로 프로그램 수행시간을 단축시킬 수 있어요. |