什么旗帜让GCC警告文件结尾没有新行?

时间:2008-11-12 02:47:43

标签: gcc warnings compiler-flags

我刚刚阅读了this post关于为什么存在新线警告的问题,但说实话,我的团队让人们在几个不同的平台上工作,并且有几个不同的编辑(每个人都使用最好的套件),所以警告已经变得无处不在,因为它不是一个真正值得关注的警告,它会变成噪音并使发现严重的警告变得麻烦。

很多时候重要的警告都没有被注意到,因为人们已经习惯了无数的无用警告经过,所以他们显然只是不再仔细地看着他们,并且有理由恕我直言。有人可以说,在我们的案例中,海湾合作委员会正在哭泣狼太多,任何人都不再认真对待它,这是一种恶劣的态度,但它只是人性。

现在我们使用-Wall进行编译,因为我们需要警告,但是有一个计数器标志来避免新行警告吗?

注意:我看了一下手册,但在任何明显的地方找不到答案,所以我放弃了。

注意:为了回应Robert Gamble完全合理的解决方案,我们的代码是跨平台的,我们有人,并在Linux,Solaris和Windows上构建,所以新行......不是达成共识。有人的编译器总是会哭泣。因为有超过40名开发人员和其他非程序员工。

6 个答案:

答案 0 :(得分:6)

假设您使用某种源控制系统,您可以添加一个预提交挂钩,以确保文本文件以适当的换行符结束。此外,根据您使用的源控制系统,您可以添加一个实际修复行结束的预提交挂钩(如果它不存在)。

答案 1 :(得分:5)

据我所知,没有一个人,我多年来一直使用海湾合作委员会。

<强>更新 不应该使用C ++ 11标准提出任何警告。 Related Q

答案 2 :(得分:4)

为什么不确保你的文件有一个像他们应该的终止换行符?这应该是违规编辑器中的简单配置更改,并且似乎是一种“静音”警告的简单方法。

答案 3 :(得分:3)

-Wno-eof-newline

这是在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。 1}}和-Wno-c++98-compat-pedantic禁用警告。

答案 4 :(得分:0)

我90%肯定没有争论可以解决这个问题。

警告的原因是没有结束行的文件在编译时会给出未定义的行为:

参见标准: http://c0x.coding-guidelines.com/5.1.1.2.html

这是一篇博客文章,其中包含一些python代码(我还没有尝试过),它说它会解决这个问题的源代码文件。

http://www.johndcook.com/blog/tag/gcc/

答案 5 :(得分:0)

在源控件中添加一个钩子,在添加换行符之前不允许成功执行代码签入?