c++ '\n\ newline 문자에 관한 질문 (어셈블리어관련)

gyxor의 이미지

int main()
{

char a=10;
char b=13;
cout << '\n'; 하거나
cout << a;
cout << b;

return 0;
}

하면 세가지 경우모두다 <라인피드>와 동시에 <케리지리턴>이 됩니다.
어셈블리어를 공부하면서 알게 된 내용인데요
흔히 말하는 리턴은 아스키문자 0ah<라인피드> 와 0dh<케리지리턴>
을 합쳐서 말하는것이고
어셈블리어에서는 라인피드와 케리지 리턴을 같이 해줘야 하는데요
c++ 에서는 이중에 어느 한가지만 사용해도 두가지를 모두를 시행하게되는데요

씨언어의 기본적인 구조에서 이런식으로 동작하도록 구성되어졌기 때문인가요??

설명부탁드립니다.

simpid의 이미지

c언어는 원래 그렇습니다.

님의 질문대로 커서위치를 다음줄 처음으로 옮기려면..
캐리지리턴(CR)과 라인피드(LF)를 해줘야 합니다.

하지만.. c는 \n 을 CR + LF로 해석하므로 \n 만으로 되는겁니다.

errai의 이미지

simpid wrote:
c언어는 원래 그렇습니다.

님의 질문대로 커서위치를 다음줄 처음으로 옮기려면..
캐리지리턴(CR)과 라인피드(LF)를 해줘야 합니다.

하지만.. c는 \n 을 CR + LF로 해석하므로 \n 만으로 되는겁니다.

Windows는 잘 모르겠습니다만, 유닉스나 리눅스계열에서는 \n(LF)를
newline convention으로 사용합니다. c나 c++에서 \n만 해줘도
다음줄로 변경됩니다. 하지만 대부분의 프로토콜 (SMTP 등) 에서는
CRLF를 newline convention으로 사용하기 때문에 \n(LF) 앞에
\r(CR)을 붙이는 작업을 해주어야 합니다.

즉 위 인용에서 써주신 글은 제 생각에 틀린것 같습니다.
언어에 생관없이 \n 은 LF만을 의미하고 \r이 CR을 의미하는 것입니다.

simpid의 이미지

errai wrote:
simpid wrote:
c언어는 원래 그렇습니다.

님의 질문대로 커서위치를 다음줄 처음으로 옮기려면..
캐리지리턴(CR)과 라인피드(LF)를 해줘야 합니다.

하지만.. c는 \n 을 CR + LF로 해석하므로 \n 만으로 되는겁니다.

Windows는 잘 모르겠습니다만, 유닉스나 리눅스계열에서는 \n(LF)를
newline convention으로 사용합니다. c나 c++에서 \n만 해줘도
다음줄로 변경됩니다. 하지만 대부분의 프로토콜 (SMTP 등) 에서는
CRLF를 newline convention으로 사용하기 때문에 \n(LF) 앞에
\r(CR)을 붙이는 작업을 해주어야 합니다.

즉 위 인용에서 써주신 글은 제 생각에 틀린것 같습니다.
언어에 생관없이 \n 은 LF만을 의미하고 \r이 CR을 의미하는 것입니다.

그런건가요?

그런거라면...

Unix나 Linux의 텍스트 파일과 Windows의 텍스트 파일이 다른 이유이기도 하겠군요.

FTP에서 binary전송과 ascii전송으로 나뉘는 이유이기도 하겠구요.

see2002의 이미지

답변은 아니지만... 줄바꿈 문자는 각각,
Windows는 "\r\n"
맥OS는 "\r"
유닉스,리눅스는 "\n"
라고합니다.

buelgsk8er의 이미지

텍스트 출력시에 \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 참조)

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.