在cpp文件中定义全局函数时,实际上可能出什么问题?

用户名

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

这些显然是本地帮助程序功能,作者只希望能够在该文件中访问。

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

但是我的问题是,如果这些函数未在头文件中声明,那么实际上会出错吗?

我想建议这些人反对这种做法,但我认为,如果我能清楚地描述可能出问题的地方,我的论点将更有分量。甚至是我们不知道的可能出了什么问题!

谢谢。

开发太阳能

第一,您在弄乱名称空间。结果可能是多个定义,即链接器错误,并且程序员选择笨拙的函数名称来规避此问题。想象一个源文件定义了它的helper()功能,下一个a是my_helper()因为helper()导致错误,然后是第三个a other_helper(),依此类推...在任何情况下,名称空间越整洁,就越容易理解实际发生的事情。

二,这是上面内容的扩展,假设ahelper( int x )和a helper( long y ),并且您可以想象由此可能引起的歧义。如果幸运的话(并使用适当的警告选项),编译器会警告您有关这些情况,但是您最终可能会调用与预期不同的函数。

第三,这是从维护者的角度来看的,如果您看到一个static在匿名名称空间中声明或声明的函数,那么您知道只需要检查当前源文件中对该函数的调用即可这使得重构容易得多。(“是否有人实际上使用了这种异国情调但有故障的功能,还是可以对其进行优化?”)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

printf或任何输出函数实际上是做什么的?

来自分类Dev

当我使用composer自动加载类/文件时,幕后实际上发生了什么?

来自分类Dev

\ forall(∀)在签名中实际上意味着什么?

来自分类Dev

Elixir`defprotocol`中的`Any`实际上包含什么?

来自分类Dev

内部存储实际上存储在android文件系统中的什么位置?

来自分类Dev

从用户定义的函数返回Empty实际上返回0

来自分类Dev

Elixir中“ defimpl”中的“ for”实际上检查什么?

来自分类Dev

以下定义实际上在做什么?

来自分类Dev

Perl中的$$实际上返回什么?

来自分类Dev

TranslationZ实际上在Android中做什么?

来自分类Dev

为什么Python的randint函数实际上不是随机的?

来自分类Dev

使用java.util.Arrays时程序无法运行-可能出什么问题了?

来自分类Dev

* .suo文件中实际上包含什么?

来自分类Dev

在Orika中定义映射时,实际上是否可以使用泛型?

来自分类Dev

在Haskell中实际上是通用长度函数

来自分类Dev

“删除”实际上在c ++中做什么?

来自分类Dev

“算法问题大小”实际上是什么意思?

来自分类Dev

`cout`函数实际上是如何在c ++中工作的?

来自分类Dev

[::-1]实际上在numpy中做什么?

来自分类Dev

自定义APN配置文件实际上是做什么的,系绳时为什么必须在浏览器中重新输入代理?

来自分类Dev

为什么删除的文件实际上没有从硬盘驱动器中删除?

来自分类Dev

Elixir`defprotocol`中的`Any`实际上包含什么?

来自分类Dev

udev规则中的GROUP实际上设置了什么?

来自分类Dev

/ dev中的设备文件实际上是做什么的?

来自分类Dev

Xtend在Eclipse中实际上是做什么的?

来自分类Dev

使用java.util.Arrays时程序无法运行-可能出什么问题了?

来自分类Dev

NameError:类中的全局名称错误,但实际上已定义

来自分类Dev

Python 'BeautiulSoup()' 函数实际上是做什么的?

来自分类Dev

我的 serverSessionSecrect() 函数实际上在做什么?

Related 相关文章

  1. 1

    printf或任何输出函数实际上是做什么的?

  2. 2

    当我使用composer自动加载类/文件时,幕后实际上发生了什么?

  3. 3

    \ forall(∀)在签名中实际上意味着什么?

  4. 4

    Elixir`defprotocol`中的`Any`实际上包含什么?

  5. 5

    内部存储实际上存储在android文件系统中的什么位置?

  6. 6

    从用户定义的函数返回Empty实际上返回0

  7. 7

    Elixir中“ defimpl”中的“ for”实际上检查什么?

  8. 8

    以下定义实际上在做什么?

  9. 9

    Perl中的$$实际上返回什么?

  10. 10

    TranslationZ实际上在Android中做什么?

  11. 11

    为什么Python的randint函数实际上不是随机的?

  12. 12

    使用java.util.Arrays时程序无法运行-可能出什么问题了?

  13. 13

    * .suo文件中实际上包含什么?

  14. 14

    在Orika中定义映射时,实际上是否可以使用泛型?

  15. 15

    在Haskell中实际上是通用长度函数

  16. 16

    “删除”实际上在c ++中做什么?

  17. 17

    “算法问题大小”实际上是什么意思?

  18. 18

    `cout`函数实际上是如何在c ++中工作的?

  19. 19

    [::-1]实际上在numpy中做什么?

  20. 20

    自定义APN配置文件实际上是做什么的,系绳时为什么必须在浏览器中重新输入代理?

  21. 21

    为什么删除的文件实际上没有从硬盘驱动器中删除?

  22. 22

    Elixir`defprotocol`中的`Any`实际上包含什么?

  23. 23

    udev规则中的GROUP实际上设置了什么?

  24. 24

    / dev中的设备文件实际上是做什么的?

  25. 25

    Xtend在Eclipse中实际上是做什么的?

  26. 26

    使用java.util.Arrays时程序无法运行-可能出什么问题了?

  27. 27

    NameError:类中的全局名称错误,但实际上已定义

  28. 28

    Python 'BeautiulSoup()' 函数实际上是做什么的?

  29. 29

    我的 serverSessionSecrect() 函数实际上在做什么?

热门标签

归档