在我的项目中,我经常看到人们在.cpp文件中定义全局函数,即不限于文件范围,类范围或任何特定名称空间的函数。
这些显然是本地帮助程序功能,作者只希望能够在该文件中访问。
我知道这是一种不好的做法,解决方案是通过使用static
关键字或更好地使用匿名名称空间将它们限制在文件范围内。
但是我的问题是,如果这些函数未在头文件中声明,那么实际上会出错吗?
我想建议这些人反对这种做法,但我认为,如果我能清楚地描述可能出问题的地方,我的论点将更有分量。甚至是我们不知道的可能出了什么问题!
谢谢。
第一,您在弄乱名称空间。结果可能是多个定义,即链接器错误,并且程序员选择笨拙的函数名称来规避此问题。想象一个源文件定义了它的helper()
功能,下一个a是my_helper()
因为helper()
导致错误,然后是第三个a other_helper()
,依此类推...在任何情况下,名称空间越整洁,就越容易理解实际发生的事情。
二,这是上面内容的扩展,假设ahelper( int x )
和a helper( long y )
,并且您可以想象由此可能引起的歧义。如果幸运的话(并使用适当的警告选项),编译器会警告您有关这些情况,但是您最终可能会调用与预期不同的函数。
第三,这是从维护者的角度来看的,如果您看到一个static
在匿名名称空间中声明或声明的函数,那么您知道只需要检查当前源文件中对该函数的调用即可。这使得重构是容易得多。(“是否有人实际上使用了这种异国情调但有故障的功能,还是可以对其进行优化?”)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句