while 문에서 궁금증
글쓴이: nadakwon / 작성시간: 수, 2006/01/25 - 12:02오후
제가 while 문안에 while 문을 돌리고 있습니다.
그러니까
while(1){ while(조건1){ while(조건2){ while(조건3){ | | while(조건n){ } } } } }
이러한 식으로 while 문안에 계속 while 문을 넣을때에
몇개의 while 문을 넣을 수 있는지 궁금합니다.
몇개가 들어가던 상관은 없을꺼 같긴한데요
n 개만큼 들어갔을때 프로그램에서 혹시 에러를 발생시킬 이유가 되지 않을까 싶기도 합니다면 고수님들의 생각은 어떠하신지요?
Forums:
아마 이론적으로(C++ 표준안) 무한개일 겁니다.현실적으로 그 갯
아마 이론적으로(C++ 표준안) 무한개일 겁니다.
현실적으로 그 갯수가 제한된 정도는 각 컴파일러의 구현 세부 사항이겠죠. 즉 implementation-defined(철자 맞는지 -_-)일듯..
Re: while 문에서 궁금증
C99는 127개, C++98은 256개까지 보장해야 한다고 되어 있습니다. (정확하게 말하면 블록의 갯수죠) 사실 127개나 쓸 일이 있을까 싶지만요.
- 토끼군
답변 감사드립니다....^^;;127개까지 보장이란 말씀은....
답변 감사드립니다....^^;;
127개까지 보장이란 말씀은....그러면 10개 정도를 사용한다했을때에는
어떤 컴파일러라도 에러의 소지를 내지는 않는다는 이야기가 되는게 맞게 되는거네요...^^;;
-+ 아자!! 행복하자 +-
[quote="nadakwon"]127개까지 보장이란 말씀은....그러면
아니오. 꼭 그렇지는 않습니다.
"127개의 중첩까지라고 명시되어 있으므로 10개 정도는 문제를 일으킬
가능성이 적겠군요."
라고 말씀하시면 맞지만,
"어떤 컴파일러에서도 문제를 일으키지 않겠군요" 혹은 "그래야만
하는군요"
는 맞지 않습니다. 즉, 해당 규정 하나만으로 컴파일러나 인터프리터의
standard conformance 여부를 논할 수는 없습니다.
많은 분들이 오해하시는 것과는 달리 tokigun 님께서 인용하신 부분은
일종의 guideline 성격입니다 - 흔히 "고무 이빨(rubber teeth)"이라고
부릅니다. 강제 규정이 아니므로 지키지 않아도 (혹은 그럴 수 없어도)
상관 없습니다. 예를 들어 프로그램의 다른 부분에서 컴파일러나
인터프리터의 자원을 너무 많이 사용하는 경우 127개에 훨씬 못 미치는
블록 중첩만으로도 해당 프로그램의 번역을 실패할 수 있습니다.
하지만, "컴파일" 환경이 특수한 환경이 아니고서는 수십개 정도의
블록 중첩으로 고민하실 현실적인 이유는 없다고 봅니다.
--
Jun, Woong (woong at gmail.com)
http://www.woong.org
[quote="전웅"]많은 분들이 오해하시는 것과는 달리 tokigun
물론 C++의 기준은 guideline입니다만 (제가 잘못 말했죠 -_-;) C의 기준은 conformance랑 관련이 있다고 생각했는데, 제 생각이 틀린 건가요?
shall be able to...를 "(conforming implementation은) 다음과 같은 프로그램을 해석하고 실행할 수 있어야 한다"라고 생각했는데, 이 해석이 맞는 것인지, 그리고 shall be able to와 그냥 shall 간의 차이점이 뭘 의미하는 건지 정확히 알고 싶습니다. 제가 영어를 잘 못 해서리 -_-;;;
- 토끼군
[quote="tokigun"]물론 C++의 기준은 guideline입니
영어를 못하신다니 겸손의 말씀을... --;
일단 표준에서 shall be able to 의 의미는 오해의 여지 없이 올바르게
해석하고 계십니다. 제가 이전에 "guideline" 운운하며 말씀드린 부분은 그
뒷부분과 관련되어 있습니다.
문장 전체를 보시면 아시겠지만, 표준은 주어진 제한 모두를 각각 "최소한"
하나씩 포함하는 "최소한" 하나의 프로그램을 번역하고 실행할 수 있어야
한다고 요구하고 있습니다.
이를 있는 그대로 해석하셔야 합니다. "최소한 그런 프로그램을 해석할 수
있으니 그보다 작은 규모의 프로그램은 당연히 해석할 수 있어야 하겠구나"
라고 유추하는 것은 잘못된 해석입니다. 즉, 표준이 실제로 요구하지 않는
바를 요구한다고 오해하기 쉬운 부분입니다.
따라서 이론상으로는 어떤 구현체가 해당 절에 나열된 요구를 하나씩만
포함하는 "특정" 형태의 프로그램 하나만을 올바르게 번역, 실행하고 그
외의 모든 프로그램은 실패한다고 해도 표준을 따르는 구현체가 될 수
있습니다. 이러한 이유에서 "고무 이빨"이라는 표현을 사용하는 것입니다.
즉, 그와 관련된 부분은 표준이 시장의 힘을 빌어 QoI 문제로 두고 있는
부분입니다. RA 의 대응하는 절을 보시면 해당 절의 "의도"가 나와 있을
것입니다.
문제가 되는 부분에 대해서는 오래 전부터 현실적인 강제성이 없는
전혀 쓸모없는 내용이라는 주장이 여러 번 있었습니다. 개인적으로는 그와
같은 주장에 부분적으로 동의합니다만, 위원회는 해당 규정을 보다 엄격히
만드는 것도 지극히 비현실적이라고 맞서면서 계속해서 그와 같은 규정을
그대로 유지하고 있습니다.
따라서 C 표준에서는 해당 부분을 단순한 guideline 수준으로 받아들여야
합니다. 자신의 프로그램에 127번 미만의 중첩 블록을 넣은 것은 반드시
번역해야 한다는 보장을 가정해서는 안 됩니다.
질문이 질문이다보니 다소 이론적인 얘기를 나열하게 되었습니다.
그럼...
--
Jun, Woong (woong at gmail.com)
http://www.woong.org
댓글 달기