C是开源的吗?

82

C语言(或任何其他低级语言)是否拥有源代码,或者编译器是“做所有工作”的部分,包括解析?如果是这样,不同的编译器是否可以有不同的C方言?标准库在这方面起了什么作用?我真的很想知道这是怎么工作的。

10个回答

143

C语言不是软件,而是一个定义标准,所以不能说它是开源的,而应该说它是一个开放标准。

然而,有无数不同的C编译器,其中许多确实是开源的。最著名的例子是GCC的C编译器,它全部采用GNU通用公共许可证(GPL),一种开源许可证。

还有更多选择。Watcom,例如,就是开源的。没有缺少开源C编译器,但毫无疑问,在非Windows世界中最广泛使用的编译器至少是GCC。

对于Windows,您最好使用CygwinMinGW,以使用Watcom或GCC。


33

C是一种标准,规定了C编译器应该如何生成程序。
C本身没有任何源代码,就像一个音符没有任何塑料。

一些C编译器例如GCC是开源的。


8
好的回答,尽管音符/塑料比喻有点超现实。 :-) - Spudley

10

C语言只是一种标准化的编程语言,它实际上就是“做所有工作”的编译器。在 C99 ANSI 标准之前,不同的编译器有不同的方言;例如Borland C和其他竞争性编译器以自己独特的方式实现了C语言。

stdlib 是一个约定俗成的标准库集合,在任何符合 ANSI C 规范的实现中都必须存在。


4
补充其他优秀的答案:
关于不同方言--有一些编译器特定的功能被添加到C语言中。您可以向gcc提供命令行标志-std = ...来指定要使用的C标准,每个标准在语法上略有不同或加入了一些特性,其中最常见的可能是c99
每个编译器倾向于实现一些不同的额外功能,例如typeof()不在C标准中,因此编译器不必实现它,但它非常有用,大多数编译器提供它。这里是gcc C扩展列表 stdlib是C标准中指定的一组函数。与编译器类似,stdlib可以具有不同的实现。GNU实现是开源的,就像gcc一样,但还有其他编译器和可能是封闭源代码的stdlib实现。

3
编译器将确定所有从C到汇编语言的映射等,但是至于谁拥有它......没有人真正拥有C,然而ANSI / ISO确定标准。

2
我认为作为一种语言,C并不是开源的。 正如许多人所指出的那样,你可以免费下载GNU授权的编译器和库,但如果你想编写自己的C编译器,你需要遵循ISO C标准,并且ISO会收取C语言规范的硬性费用,目前的费用为178美元。 因此,真正的答案取决于你对免费和开源元素的兴趣。

2

GCC的C编译器是用C语言编写的。因此,我们知道至少有一个用C编写的C编译器。

GNU的stdlib(glibc)也是用C语言编写的(stdio.h、stdlib.h)。但它也有一些部分是用汇编语言编写的。


2

一个非常好的问题。有一种方法可以定义一种语言标准(而不是实现!)以严格和明确的语言形式。不幸的是,所有旧的语言,包括C语言,都没有很好地定义。但仍然可以将这些定义转化为源代码形式。

另一种方法是通过其操作语义来定义一种语言,通常以简单(但效率低下)的参考实现的形式。


1

Helgi Hrafn Gunnarsson已经写了主要答案,但我认为值得注意的是,你也可以有效地得到方言。

编译器应该对它们支持的标准做同样的事情(现在应该几乎都是同一个版本),但是存在灰色地带。例如,编译器处理“未定义”功能的方式。如果C规范指定某个特定情况的行为是未定义的,那么编译器可以做任何它想做的事情。

还有一些例子,编译器制造商添加到库中的函数(和新库)以支持特定平台特性、创建竞争优势或仅仅是为了让生活更轻松。愤世嫉俗的人可能会认为,其中一些是为了帮助将人们锁定在特定的编译器中而添加的。


0

我不确定你对“开源”的定义是什么。

在标准化过程中,任何人都可以参与,但如果您想有投票权,则需要支付加入您所在国家的机构的费用(例如,美国的ANSI,英国的BSI,法国的AFNOR等)。通常情况下,大多数标准机构会员资格由公司支付。尽管如此,该过程还是相当开放的。您可以在标准网站上访问有关标准的讨论文件。

标准本身也不是免费的。ISO pdf store目前以198瑞士法郎的价格出售C标准。标准的草案副本可以轻松免费获取。

有很多开源编译器和库的实现。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接