상세 컨텐츠

본문 제목

Carriage Return과 Line Feed

메모

by lazz 2021. 8. 22. 17:52

본문

반응형

HTML request에서 왜 \n이 아니라 \r\n으로 줄을 구분하는지 궁금하지 않나?

개행문자(newline)는 carriage return과 line feed로 나뉜다. 이 둘은 과거 타자기의 커서를 움직이는 방식에서 시작했다. LF는 커서 위치는 정지한 상태에서 종이를 한 줄 올리는 것이고 CR은 종이를 고정시키고 커서를 맨 앞줄로 이동하는 것이다. 일반적으로 엔터를 쳤을때 생각하는 다음 줄 맨 왼쪽 커서가 결국 CR+LF인 것이다.

Windows에서는 CR+LF, Unix와 macOS는 LF를 개행문자로 사용한다.




컴파일러에서 scanner를 만드는 과제를 제출했는데 교수님이 동작하지 않는다고 해서 확인해보니 m1 맥북과 인텍 맥북에서 다르게 동작한 적이 있었다.

오랜 시간 삽질해서 결국 문제가 m1에서 whitespace 처리를

if(c == ' ' || c == '\n' || c == '\t') return true;

이렇게만 했을 때 정상적으로 작동했는데, 이게 인텔 맥북에서는

if(c == ' ' || c == '\n' || c == '\t' || c == 13) return true;
// 13은 CR의 ascii

CR까지 처리 해야 정상적으로 작동하는 것을 발견했었다.

관련 글도 없고 m1칩의 차이인지 버그인지, 아님 그냥 카탈리나와 빅서의 차이인지 모르겠지만, 굉장히 애먹은 기억이 있는데, 갑자기 생각나서 적어봤다.

반응형

댓글 영역