什么的原因是,为以下警告,在某些C++编译器?

没有newline at end的文件

为什么我应该有一个空行结束时的一个源/头文件?

有帮助吗?

解决方案

认为的一些可能出现的问题,如果没有换行。根据ANSI标准的 #include 文件的开头插入的文件正是因为它是以前的文件,并且不会插入新的线后 #include <foo.h> 后述内容的文件。所以如果包括一个文件没有newline在最后分析程序,它将被视为如果最后一行的 foo.h 是在同一线路作为第一线的 foo.cpp.如果最后一行的foo。h是一个评论没有新的线?现在第一行的 foo.cpp 是的评论。这些只是几个例子的问题类型,可以攀升。


只是想要点任何感兴趣的缔约方,对詹姆斯的答复如下。虽然上述答案仍然是正确的对C,新C++的标准(C++11)已经改变,因此,这个警告不应再发出的,如果使用C++编译器符合C++11.

从C++11标准通过詹姆斯的员额:

来源文件,该文件不是空的,并没有结束,一个新的行符,或者结束在一个新的字符,即前面一个反斜杠字之前任何这样的拼接的需要的地方,应当加以处理,如果一个额外的新的行符附的文件(C++11§2.2/1).

其他提示

要求每一来源文件的结束与非逃newline除在C++11.该说明现行文如下:

来源文件,该文件不是空的,并没有结束,一个新的行符,或者结束在一个新的字符,即前面一个反斜杠字之前任何这样的拼接的需要的地方,应当加以处理,如果一个额外的新的行符附的文件(C++11§2.2/1).

一个符合编译器应不再是问题,这个警告(至少不当编制在C++11模式,如果编译器有模式的不同版本的语言规范)。

C++03标准[2.1.1.2]宣布:

...如果来源文件,该文件不是空的不端行符,或者结束在一个新的线性格 立即前面一个反斜杠字之前任何这样的拼接的需要的地方,行为是不确定的。

回答为"服从"是",因为C++03标准说该行为的程序不结尾的行为不确定"(解释).

回答的好奇的是: http://gcc.gnu.org/ml/gcc/2001-07/msg01120.html.

它不是参照一个空行,这是否是最后一行(可能有内容)终止与一个新行。

大多数文本编辑器会把一行末尾的最后一个文件,因此,如果最后一行中没有一个,还有一种风险,该文件已被截断。然而,有效的原因,你可能不想行使它仅仅是一个警告,而不是一个错误。

#include 将代替其行文字内容的文件。如果文件并没有结束,一个新行,路线包含 #include 拉它在将合并与下一个线。

我使用的c-免费IDE5.0版,在我progrm的'c++'或'c'的语言我得到相同的问题。只是 在节目的结尾 即最后一行的程序(后括号中的功能,它可能是主要的或任何功能),按客行没有。将增加1。然后,执行同样的程序,它将运行不错。

当然在实践中的每一个编译器增加了一个新的线后#包括。谢天谢地。–@mxcl

没有具体C/C++但一C的方言当使用 GL_ARB_shading_language_include 扩展的glsl编译器在OS X警告你 关于一个失踪的新行。所以你可以写 MyHeader.h 文件头的警卫结束 #endif // __MY_HEADER_H__ 和你 失去线后 #include "MyHeader.h" 肯定的。

因为该行为的不同之处之间C/C++版本,如果文件并没有结束,新的线.特别是讨厌的是老年C++版本,外汇C++03该标准说:(翻译阶段):

如果来源文件,该文件不是空的不端在一个新的线 符,或者结束在一个新的字符,即前面一个 反斜杠,行为是不确定的。

不确定的行为是不良:一标准符合编译器可以做更多或更少它想要什么在这里(插入malicous代码或是什么)--显然因为警告。

虽然情况最好是用C++11这是一个好主意,以避免的情况下,行为是不确定的在早期版本。C++03规范比C99其彻底禁止这样的文件(行为是那么定义)。

这一警告也可能有助于表明这一文件可能已被截断。这是真的,编译器可能会扔一个编译错误,无论如何,尤其是如果它是在中间的一个函数或者一个接头的错误,但是这些可能更加隐秘,并不能保证会发生。

当然,这一警告也不能保证如果该文件被截断之后立即有一个空行,但它仍然可以抓住一些情况下,其他问题可能会错过,并提供了一个更强大的提示的问题。

这不是一个错误。这只是一个警告。

打开文件的编辑,去最后一行中的文件,并击中了该添加一个空行,以结束该文件。

虽然,除此之外,你应该使用 #include <iostream> 而不是的 <iostream.h>.然后把一个 using std::cout; 之后。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top