while(1) 과 for(;;)

언어/C 2016. 5. 31. 09:57

문득 군복무시절 동기의 코드가 기억이 났다.

...

for(;;) {

...

}


이런 문장이었는데 처음보는 코드라 동기에게 물어봤더니 무한루프랜다

당시 무한루프라고는 while(1) 밖에 몰랐던 나에겐 신선한 충격이었고

for 보다 while을 쓰는 편이더 직관적이지 않냐고 물어보았다.

근데 더 놀라는건 내 동기 ㅋㅋㅋ

for이 비교식을 넣지 않았기 때문에 더 직관적이지 않냐며 반문하는 것이었다.

그 때 이후로 나도 무한루프가 필요할 땐 for을 사용하기 시작했는데

최근에 찾아보니 for(;;)은 무한루프를 위한 특수 문법으로 C언어 명세서에 정의 되어있다고 한다.

구 컴파일러에서는 for은 비교식을 실행하지 않고 바로 루프를 도는 반면 while(1)은 비교식을 실행하고 루프구문을 실행하므로 속도차이가 있었다고 한다.

그래서 옛날 프로그래머들은 for을 많이 선호 했다고 카더라. 그리고 그게 지금까지 습관으로 이어진거고...

물론 최근의 컴파일러는 그딴거 없고 어셈블리 까보면 둘다 똑같이 비교식이 없다.

참고로 읽을 땐 forever라고 읽는다.

스택오버플로우에선 이런코드도 보았다.

#define ever (;;)

for ever { ... }

Posted by nfyfamraa
,