gpt4 book ai didi

c++ - 在 cpp 文件中定义全局函数时实际上会出现什么问题?

转载 作者:太空狗 更新时间:2023-10-29 20:25:47 25 4
gpt4 key购买 nike

在我的项目中,我经常看到人们在 .cpp 文件中定义全局函数,即不限于文件范围、类范围或任何特定命名空间的函数。

这些显然是作者只希望能够在该文件中访问的本地辅助函数。

我知道这是不好的做法,解决方案是通过使用 static 关键字或最好使用匿名命名空间将它们限制在文件范围内。

但我的问题是,如果这些函数没有在头文件中声明,实际上会出现什么问题?

我想建议这些人反对这种做法,但我觉得如果我能清楚地描述可能出错的地方,我的论点会更有分量。甚至可能已经出了我们不知道的问题!

谢谢。

最佳答案

第一,您正在弄乱命名空间。结果可能是多个定义,即链接器错误,程序员选择笨拙的函数名称来规避这种情况。想象一下,一个源文件定义了它的 helper() 函数,下一个是 my_helper() 因为 helper() 导致错误,然后是第三个 other_helper() 等等...无论如何,命名空间越清晰,就越容易理解实际发生的事情。

两个,这是上面的扩展,想象一个helper( int x ) 和一个helper( long y ),你可以想象那种由此可能产生的歧义。如果幸运的话(并使用适当的警告选项),编译器会就这些情况向您发出警告,但您最终可能会调用与预期不同的函数。

三,这是从维护者的角度来看,如果您看到一个函数是static 或在匿名命名空间中声明的,您就知道您只需要检查当前的调用此函数的源文件。这使得重构变得容易得多。 (“有没有人真正使用这个奇特但有问题的功能,或者我可以优化它吗?”)

关于c++ - 在 cpp 文件中定义全局函数时实际上会出现什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22683437/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com