문제

그 이유는 무엇입을 위해 다음과 같은 경고서는 C++컴파일러는?

아 newline 의 끝에서 파일

해야 하는 이유는 무엇 빈 라인의 끝에서 근원/헤더 파일입니까?

도움이 되었습니까?

해결책

의 일부라고 생각한 문제는 발생할 수 없는 경우에는 줄 바꿈.에 따라 ANSI 표준 #include 파일의 시작 부분에 삽입 파일이 정확히 그대로의 전면 파일 삽입하지 않은 새로운 라인 후 #include <foo.h> 후에 파일 내용.그래서 포함할 경우 파일이 없는 줄 바꿈에서 끝을 파서 그것은 것으로 볼 수 있으면 마지막의 라인 foo.h 은과 같은 줄에 있는 첫번째 줄 foo.cpp.어떤 경우의 마지막 줄은 foo.서 언급했지 않고 새로운 라인?지금의 첫 번째 라인 foo.cpp 은 존재하지 않습니다.이것은 단지 몇 가지의 유형의 예는 문제는 크리프 수 있습니다.


다만을 지적하고 싶었는 모든 이해 당사자 제임스의 대답이다.반면 위의 대답은 여전히 올바른 for C,C++표준(C++11)도록 변경되었 이 경고해야 더 이상 발행되는 경우를 사용하여 C++컴파일러를 따르는 C++11.

에서는 C++11 표준을 통해 제임스'post:

원본 파일이 비어 있지 않은 그는 끝나지 않습에 새로운 캐릭터 라인,또는 종료에 새로운 캐릭터 라인은 즉시 백슬래쉬를 앞에는 문자하기 전에 이러한 접합은 것으로 처리되는 경우에는 추가로 새로운 온라인 캐릭터들 파일에 추가된(C++11§2.2/1)입니다.

다른 팁

요구하는 모든 소스 파일을 끝으로 비 탈출 줄 바꿈이 제거되었는 C++에서 11.사양 이제 읽습니다.

원본 파일이 비어 있지 않은 그는 끝나지 않습에 새로운 캐릭터 라인,또는 종료에 새로운 캐릭터 라인은 즉시 백슬래쉬를 앞에는 문자하기 전에 이러한 접합은 것으로 처리되는 경우에는 추가로 새로운 온라인 캐릭터들 파일에 추가된(C++11§2.2/1)입니다.

는 부합하는 컴파일러는 더 이상 문제는 이 경고(적어도 컴파일할 때는 C++에서 11 모드인 경우 컴파일러가지 모드에 대한 다른 개정의 언어를 사양).

C++03 표준[2.1.1.2]선언:

...소스 파일이 없는 빈에서 끝나지 않는 줄 바꿈 문자,또는 종료에 새로운 온라인 캐릭터 바로 앞에 백슬래시기 전에 이러한 접합은,동작이 정의 되지 않습니다.

에 대한 대답은"복종"이기 때문에"C++03 표준의 행동 프로그램에서 끝나지 않는 줄 바꿈이 undefined"(의역).

응답에 대한 호기심은 여기: http://gcc.gnu.org/ml/gcc/2001-07/msg01120.html.

그렇지 않을 참조 빈 라인,그것은 마지막으로 라인(할 수 있는 콘텐츠에)으로 끝난다는 것입니다 줄 바꿈.

대부분의 텍스트 편집기를 넣어 줄 바꿈에서 마지막 라인의 파일 경우,마지막 줄이 없는 한,위험이 있는 파일을 잘립니다.그러나,거기에 유효한 이유가 원하지 않을 수도 있습 줄 바꿈 그래서 그것은 단지는 경고,오류가 아닙니다.

#include 대체의 라인으로 문자 파일 내용.파일이 없는 경우에 끝에 줄바꿈,라인을 포함하는 #include 는 그것을 뽑아서 병합으로 사용됩니다.

내가 사용하여 c-무료 IDE5.0 버전에서,내 progrm 하나의'c++'또는'c'언어 나가 동일한 문제입니다.그 의 끝에서 프로그램 즉의 마지막 줄은 프로그램(후에는 교정기는 기능의 수요는 어떤 기능),enter 키를 누르온라인 no.로 증가 할 것입니다 1.한 후 실행하여 동일한 프로그램,그것은 오류 없이 실행합니다.

물론 실제로 모든 컴파일러에 새로운 라인 후#include.고맙게도.–@mxcl

특정하지 않은 C/C++지만 방언 C:사용하는 경우 GL_ARB_shading_language_include 확장 glsl 컴파일러 OS X 에서 경고하는 당신 에 없는 줄 바꿈.그래서를 작성할 수 있습니다 MyHeader.h 파일의 헤더가드는 끝나 #endif // __MY_HEADER_H__ 당신 을 잃고 선후 #include "MyHeader.h" 확실합니다.

기 때문에 행위 사이에 차이는 C/C++버전 경우 파일이 없는 끝을 가진 새로운 라인입니다.특히 불쾌한 오래된 C++-전 fx 에서는 C++03 표준을 말한다(번역 단계):

소스 파일이 없는 빈에서 끝나지 않은 새로운 라인 문자,또는 종료에 새로운 캐릭터 라인 앞에는 즉시 백슬래쉬,캐릭터 동작이 정의 되지 않습니다.

정의되지 않은 행동이 나쁜:표준을 따르는 컴파일러를 할 수 있는 더 많거나 적은 무엇을 원하는 여기에서(삽입하는 코드를 악의가 또 무엇이든)-을 명확하게 이유에 대한 경고입니다.

는 상황에서 더 나은 C++11 그것은 좋은 아이디어 상황을 피하기 위해 동작이 정의되지 않습니다 이전 버전입니다.C++03 사양보다 더 C99 는 철저하게 금지하고 이러한 파일에(행동은 다음의 정의).

이 경고에도 도움이 될 수 있습니다는 것을 나타내는 파일을 수 있었다 잘립니다.그것의 진정한 컴파일러는 아마를 던지러 오류가든의 경우 특히 중간에서의 함수 또는 아마 링커에 오류가 있지만,이 될 수 있는 더 이해하기 위하여 보장되지 않는 발생합니다.

물론 이 경고 또한 보장이 없다면 파일이 잘린 후 즉시는 줄 바꿈이지만,그것은 여전히 수 있습을 잡아 일부 경우에는 다른 오류가 발생할 수 있습을 놓치고,제공하는 강력한 힌트를 문제입니다.

는지 오류가 있습니다.그것은 단지는 경고입니다.

오픈에서 파일 편집기를,가을의 마지막 줄은 파일을 입력하고 enter 키를 누르십시오 빈 줄을 추가하여 파일의 끝.

하지만,그 외에,당신이 사용해야 #include <iostream><iostream.h>.다음에 넣 using std::cout; 후습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top