“文件末尾没有换行符”编译器警告

新手上路,请多包涵

在某些 C++ 编译器中出现以下警告的原因是什么?

文件末尾没有换行符

为什么我应该在源/头文件的末尾有一个空行?

原文由 LeChuck2k 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1k
2 个回答

想想如果没有换行符可能会出现的一些问题。根据 ANSI 标准,文件开头的 #include 将文件完全按原样插入文件的前面,并且不会在 #include <foo.h> 之后插入新行文件的内容。因此,如果您在解析器的末尾包含一个没有换行符的文件,它将被视为 --- 的最后一行与 foo.h foo.cpp 第一行位于同一行。如果 foo.h 的最后一行是没有新行的注释怎么办?现在 foo.cpp 的第一行被注释掉了。这些只是可能出现的问题类型的几个示例。


只是想向任何感兴趣的人指出詹姆斯在下面的回答。虽然上述答案对于 C 仍然是正确的,但新的 C++ 标准 (C++11) 已更改,因此如果使用 C++ 和符合 C++11 的编译器,则不应再发出此警告。

通过 James 的帖子来自 C++11 标准:

如果源文件不为空且不以换行符结尾,或者在任何此类拼接发生之前以换行符结尾且紧接反斜杠字符结尾,则应将其视为附加的新-行字符被附加到文件中(C++11 §2.2/1)。

原文由 TJ Seabrooks 发布,翻译遵循 CC BY-SA 4.0 许可协议

就我而言,我使用 KOTLIN 语言,编译器在 IntelliJ 上。另外,我正在使用带有 LINT 的 docker 容器来修复可能存在的拼写错误、导入、代码使用等问题。这个错误很可能来自这些 lint 修复——我的意思是肯定的。

简而言之,错误说,“在文件末尾添加一个新行”就是这样。

在文件的末尾添加了行

在没有多余的空行之前:

文件上没有新行

原文由 Yasin Bekar 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏