What flag silences GCC's warning about no newline at file-endings?
我刚读过这篇关于为什么存在新线警告的帖子,但说实话,我的团队让人们在几个不同的平台上工作,并且有几个不同的编辑(每个人都使用最好的套件),所以警告已经无处不在,并且因为它的不是真的值得注意它的警告会变成噪音,并且会发现严重的警告是一件麻烦事。
很多时候重要的警告都没有引起注意,因为人们已经习惯了无数的无用警告经过,所以他们显然只是停止仔细观察它们,并且有理由恕我直言。有人可以说,在我们的案例中,海湾合作委员会正在哭泣狼太多,任何人都不再认真对待它,这是一种恶劣的态度,但它只是人性。
现在我们用-Wall编译,因为我们需要警告,但是有一个计数器标志来避免新行警告吗?
注意:我看了一下手册,但在任何明显的地方找不到答案,所以我放弃了。
注意:为了回应Robert Gamble完全合理的解决方案,我们的代码是跨平台的,我们的人员和构建基于Linux,Solaris和Windows,所以新线......没有达成共识。有人的编译器总是会哭泣。因为有超过40名开发人员,以及其他非程序员工。
-
只要每个文件以某种新行(换行符,CR + LF)结束,gcc就不会抱怨它运行的平台。
-
这就是nano编辑器闪耀的原因:它自动在最后添加换行符。 非常适合编辑配置文件(但是编写代码有点差)。
-
听起来真正的问题在于:"人们已经习惯了无数的无用警告经过"。 我用-Werror编译,这样就不会发生这种情况。 我宁愿多花一点时间来修复已经很好的代码,如果这意味着我可以打开可能会遇到真正问题的警告。 清洁编译很重要,因此所有警告都要认真对待。
假设您使用某种源控制系统,您可以添加一个预提交钩子,以确保文本文件以适当的换行符结束。此外,根据您使用的源控制系统,您可以添加一个预提交挂钩,如果它不存在则实际修复该行结束。
-
+1。实际上这是一个很好的解决方案,并可能最终做到这一点。这虽然是一种迂回的方式来做到这一点:)
-
+1你打败了我。
-
该死的,我只想写这个:-)我们做类似删除标签的事情。
据我所知,没有一个人,我多年来一直使用海湾合作委员会。
更新:
不应该使用C ++ 11标准提出任何警告。相关问题
-
谢谢你确认我的恐惧:)
-
虽然它不是我希望听到的答案:)这是我问题的正确答案。
-
这个答案仍然有效吗?它四岁了。
-
@balki模拟点---在C ++ 11中没有给出这个警告。
你为什么不确保你的文件有一个像它们应该的终止换行?这应该是违规编辑器中的简单配置更改,并且似乎是一种"静音"警告的简单方法。
-
一个原因是代码是跨平台的,我们有人,并在Linux,Solaris,Windows和Mac上构建,因此新行......尚未达成共识。有人的编译器总是会哭泣。
-
如果文件在Windows上运行时仅以换行结束,或者在Unix上运行时回车+换行,gcc不会抱怨,所以只要每个文件都以某种新行结束,这就应该有效。
-
+1为一个好的答案。但是我们使用3个编译器...而不仅仅是GCC。另外两个很好并且关闭了警告,并且90%的团队使用这些编译器,只有10%的人使用GCC,所以错误不断回来给我们。啊,拥有这样一面旗帜真的很棒......
-
其他开发人员是否了解他们正在生成不符合标准的代码以及没有结束换行符的潜在问题?
-
如果你真的想要的话,你总是可以grep -v'警告:文件末尾没有换行符'。
-
是的,我们grep我们的自动构建,但不是我们的本地编译,猜测可以做到。至于我们的同事代码是非标准的,他们知道这一点,但实际上,因为实际上每个编译器都能优雅地管理问题(或许有警告),事实是没有后果
-
因为我使用第三方库。
这是添加了gcc bug 14331的修复程序
奇怪的是,我实际上无法让gcc输出缺少换行符的警告。我想新版本完全放弃了这个警告。
我可以让gcc接受-Wno-eof-newline但是当我尝试-Weof-newline时它会抱怨无法识别的标志。 C ++ 11在文件末尾删除了对换行符的要求,但是为了用旧标准编写可移植代码,应该可以启用这种迂腐警告。
幸运的是,clang仍能正确支持有关缺少换行符的诊断:可以在所有模式下使用-Wnewline-eof启用此警告,或者在C ++ 11及更高版本模式下也可以使用-Wc++98-compat-pedantic启用此警告。
默认情况下这些警告是关闭的,但是如果您利用clang的-Weverything标志来启用"减法"策略来控制警告,那么在C ++ 11及更高版本模式下,您需要-Wno-newline-eof和-Wno-c++98-compat-pedantic禁用警告。
在源控件中添加一个钩子,在添加换行符之前不允许成功执行代码签入?
-
添加修复文件的钩子的想法比反驳提交的想法更好。在我们的专业中,我可能很少见,认为人类需求先于机器和编译器的需求。
我90%肯定没有争论可以解决这个问题。
警告的原因是没有结束行的文件在编译时会给出未定义的行为:
见标准:
http://c0x.coding-guidelines.com/5.1.1.2.html
这是一篇博客文章,其中包含一些python代码(我还没有尝试过),它说它将解决此问题的源代码文件。
http://www.johndcook.com/blog/tag/gcc/
-
在其他编译器中它可以关闭,我的意思是你可以关闭所有警告,如果你想,这当然是"不合理的",但可能。因此,有很多论据可以改变无用的和现实生活中明确定义的行为(编译完全正确)警告。
-
好吧,说实话,你是正确的,没有理由在理想的程序员世界中关闭它,但是我们的项目遭受了一些后勤问题,这些问题很好地解决了这个问题。