为什么在任何编程语言中都有声明默认命名空间/库的约定?

时间:2010-11-17 10:47:12

标签: c# java c++ c programming-languages

为什么没有任何编程语言加载默认库,如stdio.hiostream.husing System,以便避免声明?

由于任何程序都需要这些命名空间/库,因此编译器为什么希望用户声明它。

是否存在任何程序而不使用命名空间/标题?即使是,加载无害的默认库有什么不对?

我不是那个意思..我懒得写一行代码,但是对于编译器来说,为了声明所谓的默认 thingummies结束而哭泣是没有意义的(按照我)编译错误。

7 个答案:

答案 0 :(得分:4)

这是因为程序,它们是在没有标准库的情况下编写的。例如,在嵌入式系统上运行的大量C程序没有提供stdio.h,因为它在这些平台上没有任何意义(在C中,这种环境被称为“独立”,如反对更常见的“托管”)。

答案 1 :(得分:2)

“默认”库并非“在任何程序中都需要”,实际上很多情况下它们甚至不可用(操作系统内核/驱动程序,微控制器等)。在主流中,许多高级图形程序使用特定于系统的GUI /图形库而不是标准I / O.

答案 2 :(得分:1)

对于stdio.h / iostream(.h):快速回答是,在软件的最大部分,不需要它们(最终不是两者)。无头设备/服务器应该具有记录模块,而GUI并不总是具有与之接口的控制台。

答案 3 :(得分:1)

许多语言(特别是脚本语言,以及作为语言规范一部分的标准运行时的语言)执行此操作。

权衡取舍是方便与软件工程的良好关系。默认情况下打开命名空间的问题是最终会在顶层立即提供大量名称,这可能会导致名称冲突和混淆,污染智能感知/自动完成列表等。

答案 4 :(得分:0)

因为库是语言的外部组件。如果一天所有库(或其中的一部分)更改标题,那么语言元素的名称空间不会随之更改。编译器只检查编程语言的语法和规则。

答案 5 :(得分:0)

跟进caf的回答。

您需要告诉编译器有关这些标头/库的信息,这样您就不必包含任何您不想要的内容。因为每个程序都需要。任何程序员都能够用c或c ++编写一个不依赖于任何运行时库的库。这种能力可以编写尽可能精简的软件,并节省内存/磁盘空间/编译时间/链接时间(选择您最需要的)。在低级语言中,您只需支付所需的费用,仅此而已。

答案 6 :(得分:0)

存在名称冲突问题。随着语言标准的发展,它们提供了越来越多的功能,为它们提供了更多名称。并且用户程序中定义的系统名称和名称的概率提高。为了避免这种情况,模块中定义的新功能将在程序不使用时不包括在内。由于系统库使用许多常用用法词作为其符号(如openrestricted),因此问题严重。

但显式模块包含不仅是避免冲突的方法。它们还包括:对系统名称使用“标准”命名空间(例如C ++,namespace std),保留名称和名称模式(例如C,双下划线),允许重新定义(例如Forth)。