소스 파일 끝에 빈 줄을 두는 것이 왜 권장됩니까?


232

일부 코드 스타일 도구는 이것을 권장하며 빈 줄 누락에 대해 경고하는 일부 유닉스 명령 줄 도구를 보았습니다.

빈 줄이 추가 된 이유는 무엇입니까?


7
파일이 줄 바꿈으로 끝나지 않으면 일부 도구가 작동하지 않습니다. 그것은 끝에 빈 줄이있는 것과 다릅니다 (2 줄 바꿈).
William Pursell

2
빈 줄 ( \n\n) 또는 새 줄 을 의미 \n합니까?
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功

13
cat쉘에 파일을 넣으면 이유를 알 수 있습니다. 파일이 내 쉘 프롬프트를 다른 곳 (줄 시작 부분)에 나타나게하면 아마 당신을 미워할 것입니다. ;)
ThiefMaster

2
이 오래된 질문을 겪고 모든 단일 답변이 현대의 코더가 코드 자체에 가치가없는 문자를 추가해야한다고 말함으로써 다른 도구 및 시스템의 단점과 단점을 정당화하려고한다고 믿을 수는 없습니다. 감금소에있는 원숭이 5 마리에 대해 이야기하십시오! :-D
Amos M. Carpenter

1
일반적으로 텍스트 파일에 더 나은 (일반적인) 답변 :: stackoverflow.com/questions/729692/…
Ruben Bartelink

답변:


188

텍스트 파일의 마지막 데이터 행이 줄 바꿈 또는 캐리지 리턴 / 줄 바꿈 조합으로 종료되지 않으면 이전 도구가 제대로 작동하지 않습니다. 대신 ^ Z (eof)로 끝나는 라인을 무시합니다.


1
답변 해주셔서 감사합니다! 이 동작을 나타내는 인기있는 도구의 예가 있습니까?
Nick Merrill

8
@NickM 텍스트 입력을 받거나 텍스트 파일을 읽는 거의 모든 POSIX / Unix 명령 줄 도구는 파일 끝에서 줄 끝 ( \n)을 가정 합니다. Vim과 같은 여러 텍스트 편집기와 여러 컴파일러 (특히 C ++ 및 Python)가 경고를 표시합니다. (C ++의 경우 표준에서 명시 적으로 요구합니다.)
greyfade

5
그래서 당신이 말하는 것은 ... 그것은화물 숭배입니다
Jaykul

그러나 마지막 줄에 텍스트가 있으면 질문에 빈 줄이 언급됩니다 \n\n.
jinawee

57

두 개의 텍스트 파일을 함께 연결하려고하면 첫 번째 파일이 줄 바꿈 문자로 끝나면 훨씬 더 행복해집니다.


38

텍스트 편집기에서 파일 끝으로 이동할 때 커서 위치가 더 좋다는 사실 외에도.

파일 끝에 줄 바꿈이 있으면 파일이 잘리지 않았는지 간단히 확인할 수 있습니다.


221
파일이 잘릴 수 있으며 kn도 절대로 작동하지 않을 것입니다.
Simon Nickerson

26

이 같은 추론 다음 파일을 추가 할 경우 인수는 청소기의 차이점에 대해 할 수있는 이유는이 목록에서 허용 쉼표를 후행하는?

다음은 링크 된 리소스에서 복사 (그리고 약간 잘라 내기)되었습니다.

바꾸다:

s = [
  'manny',
  'jack',
]

에:

s = [
  'manny',
  'jack',
  'roger',
]

diff의 한 줄 변경 만 포함합니다.

  s = [
    'manny',
    'jack',
+   'roger',
  ]

후행 쉼표를 생략하면 더 혼란스러운 여러 줄 diff를 이깁니다.

  s = [
    'manny',
-   'jack'
+   'jack',
+   'roger'
  ]

링크 전용 답변은 SO에서 가치있는 것으로 간주되지 않습니다. 속성을 유지하면서 관련 정보를 여기에 복사하십시오.
isherwood

17

파일 끝에 빈 줄이 나타나서 입력 스트림에서 표준 판독 값이 언제 판독을 종료해야하는지 알 수 있으며 일반적으로 EOF를 반환하여 종료에 도달했음을 나타냅니다. 대부분의 언어는 EOF 마커를 처리 할 수 ​​있습니다. DOS에서 EOF 마커는 F6 키 또는 Ctrl-Z, * nix 시스템의 경우 Ctrl-D였습니다.

전부는 아니더라도 대부분의 경우 실제로 EOF 마커까지 직접 읽으므로 런타임 라이브러리의 입력 읽기 기능은 더 이상 읽기를 중지해야 할 시점을 알 수 있습니다. 추가 모드를 위해 스트림을 열면 EOF 마커가 지워지고 그 시점에 EOF 마커가 삽입 될 닫기가 명시 적으로 호출 될 때까지 EOF 마커가 지워집니다.

오래된 도구는 빈 줄과 EOF 마커가 필요했습니다. 오늘날 도구는 빈 줄을 처리하고 무시할 수 있습니다.


6
^ D는 "EOF 마커"가 아닙니다. ^ D를 누르면 쉘이 포 그라운드 프로세스 그룹이 읽고 있던 파이프의 쓰기면을 닫아서 해당 파이프의 읽기가 EOF를 리턴했습니다. "EOF 마커"가 없습니다.
윌리엄 퍼셀

@William Pursell 실수로 * NIX와 Windows를 혼동했습니다. 레거시 Windows / DOS는 대부분의 파일 끝에 일반적으로 포함 된 EOF 마커 (26, 0x1a)를 고대의 CP / M과의 호환성을위한 보류로 사용했습니다 (1983 년 이후 누가 CP / M을 사용 했습니까?). 다른 "fun": \r\n대신 \nDOS는 ASCIIZ와 ASCII $를 혼합하여 사용합니다. 더 나쁜 것은 나중에 Windows에서 대개 대부분의 텍스트 파일 시작 부분에 BOM (Unicode byte order mark)을 삽입하는 것입니다. 사랑스러운 "고유성"

9

또한 파일을 수정하고 파일 끝에 일부 코드를 추가하면 diff (적어도 표준 구성의 git diff)는 마지막 행을 변경했지만 실제로 수행 한 유일한 작업은 개행 기호를 추가 한 것으로 나타납니다. 따라서 cvs 보고서는 덜 편리해집니다.


5

일부 언어는 입력 파일을 입력 줄로 정의합니다. 여기서 각 입력 줄은 캐리지 리턴으로 끝나는 일련의 문자입니다. 해당 문법이 정의되어 있으면 파일의 마지막 유효한 행도 캐리지 리턴으로 종료해야합니다.


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.