C是否具有与C ++类似的名称空间?

时间:2017-10-08 00:39:53

标签: c

来自Programming Language Pragmatics by Michael Scott

  

C和C ++的现代版本包括命名空间机制   提供类似模块的数据隐藏

C是否具有与C ++类似的名称空间?

C in a Nutshell中提到的“标识符名称空格”是Scott书中提到的“名称空间”,类似于C ++中的名称空间吗?

感谢。

2 个答案:

答案 0 :(得分:4)

,C 具有命名空间机制,您可以提供“类似模块的数据隐藏”。

图书质量
我对你引用的那本书一无所知,但是“命名空间”这个词就是那些被重载到很多不同含义的词,就像“窗口”一样。 (我质疑作者所说的有关世界上最古老,最普遍的计算机语言之一如此肆无忌惮的错误的重要性。)

在C中命名空格
C中的“名称空间”是一种完全不同的机制,用于完全不同的目的。这些是“C in a Nutshell”中讨论的名称空间。这些词的含义与C ++命名空间不同。由于David Rankin不愿意查阅引用C11标准的章节和章节,因此这些是C中使用的名称空间:

  • 标签名称
  • struct / union / enum 标签
  • struct / union 成员
  • 其他一切(包括枚举值)

快速了解范围
请记住,这没有说明范围,这是一个单独的机制。例如,全局变量和函数本地变量可以具有相同的名称;然而,他们拥有相同的名称空间。区别在于全局的可见性被局部变量遮挡。

C ++中命名空间的值
目前还不清楚命名空间是否是对C ++非常有用的扩展,并且关于其正义的争论仍在继续。 C人群(大多数)同意添加命名空间所涉及的头痛并不能证明目的是正确的。我在键盘顶部的互联网上找不到任何特别有用的东西,除了一些关于使用结构模拟它们或使用宏滥用(甚至更糟)模仿它们的平淡无奇的模糊。如果你真的想挖掘,你可能会在comp.lang.c新闻组中找到一些有用的讨论。

答案 1 :(得分:0)

不,C 与 C++ 命名空间完全不同。大多数人最多只能使用一种下划线表示法来伪造 C++ 所做的事情。这至少是我所做的,而不是试图将东西打包到结构中。您的 IDE 仍将有助于代码辅助,您只需要习惯使用下划线而不是 .对于一切

C++

MyNamespace::MyObject.myMethodOrVar ...

在 C 中看起来像这样

MyNamespace_MyObject_myMethodOrVar

可能不像 C++ 或 Java 那样流畅,但它可以工作并且仍然有助于避免名称冲突。这只是屁股痛。 是的,这不会为您提供像 use 这样的句法设备。恐怕就是这样。