warning: no newline at end of file

iceman19860106 2009-03-11 08:26:20
我知道只要在最后面按下回车就能解决这个警告
我想知道为什么GCC编译器要求在文件的最后必须有一新行?
请各位帮帮忙!谢谢!
...全文
922 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
liuyang1943 2009-03-20
  • 打赏
  • 举报
回复
楼上正解。末行多个回车就OK了
kingstarer 2009-03-20
  • 打赏
  • 举报
回复
晕,又百度了一下,发现更合理的解释



GCC中如果文件最后不加上一行空行的话,就会冒个warning:no newline at end of file。

在《Rationale for the C99 standard》一文中,有C99的相关信息:

A backslash immediately before a newline has long been used to continue string literals, as well as preprocessing command lines. In the interest of easing machine generation of C, and of transporting code to machines with restrictive physical line lengths, the C89 Committee generalized this mechanism to permit any token to be continued by interposing a backslash/newline sequence.

c/c++代码的每一行后面有一个“结束符”,也就是newline。避免当被include的文件展开后,前一个文件的最后一行与后一个文件的第一行直接被连接成一行从而造成错误。

kingstarer 2009-03-20
  • 打赏
  • 举报
回复
英文的意思就是说文末没有换行符。Unix文档的回车换行符是一个字符\n,Windows的是分别的两个\n\r,所以你在Windows下编辑的最后一个字符是\r不是\n,所以编译器以为有错误。

在文件最后补一个新行即可

百度的,应该是基于这个考虑的
ceasar1134 2009-03-19
  • 打赏
  • 举报
回复
遇到过类似问题。
我是在windows下编辑程序然后在linux下编译,每次头会提示这个警告,于是在windows下每次在一个文件的结尾我都会加一个空行。在linux下使用vim编辑就没有类似的警告,不加空行也可以的
mosaic 2009-03-11
  • 打赏
  • 举报
回复
比如严格的编译器好像都是这种,比如HP或compaq小型机上的cc。

ibm aix上的编译器则没有这个要求。
  • 打赏
  • 举报
回复
。。没考虑过这样问题,估计是防止什么错误吧
fox000002 2009-03-11
  • 打赏
  • 举报
回复
可以防止一些错误吧,如最后一行行尾有个 \ 之类的
源程序说明: 1.有些程序是“面试题选”部分的程序,这些程序是习题,有些是不完整(没有main函数,只是一个函数)、有些是故意留有错误的,但书中的例题解答里已经详细说明错误的原因。所以,并不是每个程序都可以编译运行的,所有程序请对照书中的相应部分。如果是一个用于说明某个知识点的示范程序,那么是一定可以运行的。此外,要注意:有些程序编译时要带上命令行参数,比如编译多线程程序时,需带上-lpthread选项。对于此类程序编译时,书中都有对应的编译命令。对于一般的程序,只需使用如下命令:gcc -o test test.c。 2.由于格式原因,源程序在Windows下使用Visual C++编辑器打开,那么程序是对齐的。如果使用其他文本编辑器打开,不能一定保证源代码象书中一样是对齐的。 3.1~5章的程序是按照例子编号命名的,比如:第2章例1的源程序命名为2-1.c。有些例子没有程序,因此编号不是连续的,比如:4-18.c之后是4-20.c,因为第4章的例19没有程序代码。6~12章的程序是以书中的程序名命名的,比如:第6章的第一个程序,书中命名为my_chmod.c,那么在这里源程序也命名为my_chmod.c。 4.每一章的源代码可以使用命令“make”进行编译,使用该命令可以生成该章所有可执行程序。如果没有生成对应的可执行程序,请对照书中相应的内容。在编译生成可执行程序时,可能会生成警告:“warning:no newline at end of file”,产生这个警告是因为本书所有源代码是在Windows中进行编写的,Windows和Linux两种操作系统对于文件末尾的标识符处理不一致。该警告不会影响程序的功能和性能,所以不必理会。

23,121

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧