for(;;) vs while(1)
글쓴이: gurumong / 작성시간: 수, 2007/03/14 - 4:15오후
안녕하세요
얼마전에 아는 친구놈이 공부를 한다고 작성한 소스코드를 보았습니다
그런데 한 문장이 이상하게 보이더라구요
버뜨~! 그래서 컴파일을 했떠니 정상적으로 실행이 되는거였습니다
for(;;)라는 코드인데
제가 알기론 for문은 while문과 마찬가지로 조건식이 만족하는 동안 루프문을 도는걸로 알고있는데요
그런데 조건식이 아예 비여있는데 그것이 참값이 되는것인지 좀 의야했는데
아예 무한 루프를 만들것이면 (어떤 조건에 의해서 언젠가 탈출 하겠지만)
좀더 이쁘게 보이는 while(1)문을 쓰지 왜 for(;;)을 사용할까 궁금증이 생기더라구요
irc채널에서는 많이들 사용한다고 그러던데요
아무리 생각해봐도 이점이란게 타이핑 횟수가 1회 적다는것 이외에 안보이더라구요
왜 for(;;)문장을 많이들 사용하는것일까요?
Forums:
while(1)보다 for(;;)가
while(1)보다 for(;;)가 좀더 이쁘게 보입니다.
forever라고 읽습니다.
for( ;; ) 에 한표...
코드읽을 때, forever라고 읽습니다. ^^;;
동의 한 표
forever에 동의 한 표입니다. :)
저도 while(1)을
저도 while(1)을 씁니다.
C99에서 stdbool.h를 포함한 상태나 C++에서는 "while(true)"로도 쓸수 있구요.
for(;;)은 모양이 안예쁘고 이모티콘 -_-;;의 ;;처럼 생겼어요.
------------------------------------------------------
In simplexitate est opportunitas. --cppig1995
[낡배밀] 낡은 리눅스 배포판을 밀어내야 한다고 생각합니다.
Real programmers /* don't */ comment their code.
If it was hard to write, it should be /* hard to */ read.
저는 for (;;)를
저는 for (;;)를 씁니다.
누구한테 들은 얘기로(?) 구린 오래된 컴파일러를 쓰면 while (1)으로 했을 때 loop돌 때마다 1이 0이 아닌지 체크한다고 하더군요. (헛소리일지도. ^^;)
Taeho Oh ( ohhara@postech.edu , ohhara@plus.or.kr ) http://ohhara.sarang.net
Postech ( Pohang University of Science and Technology ) http://www.postech.edu
Digital Media Professionals Inc. http://www.dmprof.com
Taeho Oh ( ohhara@postech.edu ) http://ohhara.sarang.net
Postech ( Pohang University of Science and Technology ) http://www.postech.edu
Alticast Corp. http://www.alticast.com
얼마나 구린
얼마나 구린 컴파일러인지는 모르겠지만, 최소한 제가 쓰고 있는 gcc-3.4.6에서는
for(;;)나 while(1)이나 어셈블 코드는 똑같이 나오네요.
gcc-3.4.6정도면 상당히
gcc-3.4.6정도면 상당히 최신의 상당히 좋은 컴파일러라고 생각합니다. -_-;;;
Taeho Oh ( ohhara@postech.edu , ohhara@plus.or.kr ) http://ohhara.sarang.net
Postech ( Pohang University of Science and Technology ) http://www.postech.edu
Digital Media Professionals Inc. http://www.dmprof.com
Taeho Oh ( ohhara@postech.edu ) http://ohhara.sarang.net
Postech ( Pohang University of Science and Technology ) http://www.postech.edu
Alticast Corp. http://www.alticast.com
그래서 GCC-1.27
GCC-1.27에서 해봤는데도, 결과가 같습니다.
거의 10년 지났지만, 나중에 찾아볼 사람이 있을 것 같아서 기록해 놓습니다.,
말씀하신대로 나중에 찾아왔습니다.
정보 얻어갑니다!
개인취향이죠..
for(;;)라고 쓰는게 뭔가 있어보인달까요 ;;
가독성을 생각하면 while(1)같은게 한눈에 들어오긴하지만
어차피 눈에 익으면 for(;;)도 똑같아서..
----
자신을 이길 수 있는자는
무슨짓이든 할수있다..
즉..무서운 넘이란 말이지 ^-_-^
나? 아직 멀었지 ㅠㅠ
----
자신을 이길 수 있는자는
무슨짓이든 할수있다..
즉..무서운 넘이란 말이지 ^-_-^
나? 아직 멀었지 ㅠㅠ
유명한 네트워크 프로그래밍 책에 for(;;) 를 쓰더군요
스티븐스 아저씨의 책이던가요 하여간 네트웍 프로그래밍 할 때 꼭 보는 책에 for(;;) 이렇게 되어 있던데요.
네트워크 프로그래밍 그 책으로 공부하면서 따라 쓰다 보면 for(;;) 이렇게 그냥 무심코 쓰게 되는 건지도 모르죠.
--
There's nothing so practical as a good theory. - Kurt Lewin
--
There's nothing so practical as a good theory. - Kurt Lewin
"하스켈로 배우는 프로그래밍" http://pl.pusan.ac.kr/~haskell/
저도 예전에
저도 예전에 while(1)보다 for(;;)가 빠르다는 이야기를 들은 적이 있습니다. 아마 실제로는 동일하겠지만, 배울 때 저렇게 배우면 습관으로 굳어질 수도 있을 것 같습니다. 저는 while(1)을 사용합니다~
while(1)의 경우는...
while(1)뿐만 아니라
while("infinite"), while(69), while(3.14) 전부 무한루프가 됩니다.
즉 0이 아닌값이면 계속 수행되는거죠.
조건식의 값을 상수로 줘서 무한루프로 만들어 버린 경우라 할 수 있죠...
(상수는 말그대로 값이 안 변하니까 무한이죠.)
물론 같은 원리로 for(;"infinite";)도 무한루프로 동작합니다.
그런데 for(;;)같은 형식은 조건식의 값으로 상수를 주어 무한루프로 만들었다기 보다
조건식이 생략되었을때 for문은 무한루프와 같이 동작한다는 C언어 규정에 따르는 동작이겠지요.
그러니까 그렇게 동작이 되는거죠. 그런 규정이 없다면 문법오류가 되겠지만
문법오류가 아니고 무한루프로 수행이 된다는건 그런 규정이 따로 있다는 것입니다.
정리하면 C언어는 무한루프에 대해서 for(;;)와 같은 규정을 가지고 있다고 생각할 수 있습니다.
그래서 전 상수를 사용한 트릭적인 방법보다 언어에서 규정하고 있는 듯한 방법인
for(;;)를 더 선호합니다.
시그너쳐: ./configure --prefix=/usr; make; sudo checkinstall
while(1)이랑 for(;;)랑
while(1)이랑 for(;;)랑 섞어 쓰다가 언젠가 for(;;)구문이 더 빠를수도 있다고 들어서 for를 더 쓰다보니 습관이 되더군요
좋은 컴파일러들이야 당연히 다 비슷하겠지만 습관이란게...;;;
개인적으로는
개인적으로는 가능하면 while(1)이나 for(;;)등의 무한루프는 가능하면 안씁니다.
물론 편하기는 합니다만 가독성이 떨어진다랄까.... 그런 느낌이 들어서요.
만약 조건을 나중에 검사 해야 하는 경우가 생기면 보통 do ~ while 문을 사용하는 편입니다.
------------------------------------------------------------
이 멍청이~! 나한테 이길 수 있다고 생각했었냐~?
광란의 귀공자 데코스 와이즈멜 님이라구~!
------------------------------------------------------------
이 멍청이~! 나한테 이길 수 있다고 생각했었냐~?
광란의 귀공자 데코스 와이즈멜 님이라구~!
굳이 for 문의
굳이 for 문의 이점이라고 갖다 붙이자면,
혹시 코드 테스트하느라 루프에 test condition 넣었다 뺐다 해야 할 경우가 있을 때 initialize, test, increment 를 한 줄에서 해결할 수 있다는 점 정도..
사실 while(1)
사실 while(1) 하는것보단.. for(;;) 하는게 타자 수도 더 적고
1을 칠려면 위에까지 올라가야하지만 ;; 을 칠려면 세끼손가락 연타만 두번 해주면 되기때문에..
단순하 귀차니즘을 for(;;)을 쓰기도 합니다;
-------------------------------------------------------------------------------
It's better to appear stupid and ask question than to be silent and remain stupid.
-------------------------------------------------------------------------------
It's better to appear stupid and ask question than to be silent and remain stupid.
전 future proofing을 위해
전 future proofing을 위해 for(;;)을 씁니다.
나중에 초기화, exit 조건, STEP등이 들어갈걸 대비해서요
/***************************************
Being the one is just like being in love.
***************************************/
왜 무한반복을 하나요?
for은 주로 어디에 쓰고
while은 주로 어디에 쓰이나요?
저는 그곳에 답이있다 생각합니다.
댓글 달기