linux 中警告:文件未以空白行结束

原因其实也很简单,因为标准规定如此。C99第5.1.1.2节这样写道:

    Each instance of a backslash character (\) immediately
    followed by a new-line character is deleted, splicing
    physical source lines to form logical source lines.
    Only the last backslash on any physical source line
    shall be eligible for being part of such a splice. A
    source file that is not empty shall end in a new-line
    character, which shall not be immediately preceded by
    a backslash character before any such splicing takes
    place.

C99 Rationale中进一步指出:

    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.

这么规定的初衷有两个:一是为了每一行都要以换行结束。二是,因为行尾的\表示连接下一行,如果一个文件最后一行行尾有\,那么,紧跟它也被包含进来的下一个源文件的第一行就会被连接!而如果一个文件以一个空行结束就会避免这种情况的发生

因为有影响编译的可能, 编译器就提示了这个警告. 想清除这个警告就老实地按警告的提示做, 不要偷懒。


from gcc@gcc.gnu.org mailing list

Re: no newline at end of file

    * To: moz at compsoc dot man dot ac dot uk
    * Subject: Re: no newline at end of file
    * From: DJ Delorie <dj at redhat dot com>
    * Date: Sun, 15 Jul 2001 00:56:27 -0400
    * CC: gcc at gcc dot gnu dot org
    * References: <20010715024419.A84310@compsoc.man.ac.uk>

> What is the rationale for this warning ? What can break or is it a
> standards thing ?

Imagine foo.h:

blah blah blah<no newline>

Now bar.c:

#include "foo.h"
#include "grill.h"

Now imagine a preprocessor that isn't smart enough to put
the newline in for you...

blah blah blah#include "grill.h"

It may not include grill.h.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值