c++ '\n\ newline 문자에 관한 질문 (어셈블리어관련)
글쓴이: gyxor / 작성시간: 수, 2003/05/21 - 1:14오후
int main() { char a=10; char b=13; cout << '\n'; 하거나 cout << a; cout << b; return 0; }
하면 세가지 경우모두다 <라인피드>와 동시에 <케리지리턴>이 됩니다.
어셈블리어를 공부하면서 알게 된 내용인데요
흔히 말하는 리턴은 아스키문자 0ah<라인피드> 와 0dh<케리지리턴>
을 합쳐서 말하는것이고
어셈블리어에서는 라인피드와 케리지 리턴을 같이 해줘야 하는데요
c++ 에서는 이중에 어느 한가지만 사용해도 두가지를 모두를 시행하게되는데요
씨언어의 기본적인 구조에서 이런식으로 동작하도록 구성되어졌기 때문인가요??
설명부탁드립니다.
Forums:
예 그렇습니다.
c언어는 원래 그렇습니다.
님의 질문대로 커서위치를 다음줄 처음으로 옮기려면..
캐리지리턴(CR)과 라인피드(LF)를 해줘야 합니다.
하지만.. c는 \n 을 CR + LF로 해석하므로 \n 만으로 되는겁니다.
Re: 예 그렇습니다.
Windows는 잘 모르겠습니다만, 유닉스나 리눅스계열에서는 \n(LF)를
newline convention으로 사용합니다. c나 c++에서 \n만 해줘도
다음줄로 변경됩니다. 하지만 대부분의 프로토콜 (SMTP 등) 에서는
CRLF를 newline convention으로 사용하기 때문에 \n(LF) 앞에
\r(CR)을 붙이는 작업을 해주어야 합니다.
즉 위 인용에서 써주신 글은 제 생각에 틀린것 같습니다.
언어에 생관없이 \n 은 LF만을 의미하고 \r이 CR을 의미하는 것입니다.
Re: 예 그렇습니다.
그런건가요?
그런거라면...
Unix나 Linux의 텍스트 파일과 Windows의 텍스트 파일이 다른 이유이기도 하겠군요.
FTP에서 binary전송과 ascii전송으로 나뉘는 이유이기도 하겠구요.
답변은 아니지만... 줄바꿈 문자는 각각, Windows는 "\r\n
답변은 아니지만... 줄바꿈 문자는 각각,
Windows는 "\r\n"
맥OS는 "\r"
유닉스,리눅스는 "\n"
라고합니다.
텍스트 출력시에 \n을 CR+LF 로 변환하는 건 표준 ANSI C와는
텍스트 출력시에 \n을 CR+LF 로 변환하는 건 표준 ANSI C와는 상관이 없고, Microsoft C Runtime Library의 extension에 해당합니다.(MSDN fopen 참조) fopen시에 mode 인자에 "t"를 추가해서 text모드로 열 경우에 작동되는 기능이지요. 반면 "b"모드, 즉 binary모드로 연 경우에는 \n를 출력하면 LF만 기록됩니다.
유닉스 환경의 경우는 애초부터 text/binary 개념을 굳이 구분하지 않았기 때문에 이러한 컨버젼과 관련된 문제가 없는 반면, Win32의 경우 과거 MS-DOS시절부터 text화일들은 관습적으로 CR+LF형식이었죠. 그런데 또 묘한 것이 C 환경에서는 관습적으로 줄 구분자로 \n을 사용해왔기 때문에, MS CRT에서 그러한 변환을 해주는 것입니다. (Win32 자체는 유닉스처럼, 굳이 text/binary를 구별하지 않지요. CreateFile 참조)
댓글 달기