为什么没有任何编程语言加载默认库,如stdio.h
,iostream.h
或using System
,以便避免声明?
由于任何程序都需要这些命名空间/库,因此编译器为什么希望用户声明它。
是否存在任何程序而不使用命名空间/标题?即使是,加载无害的默认库有什么不对?
我不是那个意思..我懒得写一行代码,但是对于编译器来说,为了声明所谓的默认 thingummies结束而哭泣是没有意义的(按照我)编译错误。
答案 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)
存在名称冲突问题。随着语言标准的发展,它们提供了越来越多的功能,为它们提供了更多名称。并且用户程序中定义的系统名称和名称的概率提高。为了避免这种情况,模块中定义的新功能将在程序不使用时不包括在内。由于系统库使用许多常用用法词作为其符号(如open
,restricted
),因此问题严重。
但显式模块包含不仅是避免冲突的方法。它们还包括:对系统名称使用“标准”命名空间(例如C ++,namespace std
),保留名称和名称模式(例如C,双下划线),允许重新定义(例如Forth)。