C是开源的吗?


77

这可能是一个愚蠢的问题,但我一直对此感到疑惑。C(或其他任何低级语言)甚至都具有源代码,还是编译器是“完成所有工作”(包括解析)的部分?如果是这样,不同的编译器难道没有不同的C语言吗?stdlib在哪里影响因素?我真的很想知道这是如何工作的。

Answers:


135

C语言不是一种软件,而是一种已定义的标准,因此不会说它是开源的,而是它是一种开放标准。

然而,有大量的C语言不同的编译器,其中许多确实是开源的。最著名的例子是GCC的C编译器,该编译器均受GNU通用许可证(GPL)(一种开源许可证)的约束。

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

对于Windows,最好的选择是使用CygwinMinGW的Watcom或GCC 。


29

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

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


6
很好的答案,尽管音符/塑料类比有点超现实。:-)
Spudley 2011年

10

C只是一种语言,在那也是一种标准化的语言。编译器几乎可以“完成所有工作”。不同的编译器确实有不同的方言。在C99 ANSI标准之前,您拥有Borland C和其他竞争性编译器之类的东西,它们以自己独特的方式实现了C语言。

stdlib 只是在任何ANSI C实现中都必须存在的标准库的公认集合。


4

要添加其他出色的答案:

关于不同的方言-向C添加了一些特定于编译器的附加功能。您可以-std=...向gcc提供命令行标志,以指定要使用的C标准,每个标准对语法都有细微的变化/补充,最常见的可能是c99

每个编译器都倾向于实现一些不同的附加功能,例如,typeof()不在C标准中,因此编译器不必实现此功能,但是它很有用,并且大多数编译器都提供了它。这是gcc C扩展的列表

stdlib是C标准中指定的一组函数。与编译器非常相似,stdlib可以具有不同的实现。GNU实现和gcc一样都是开源的,但是还有其他编译器,也可能是stdlib的其他实现的封闭源代码。


3

编译器将确定从C到Assembly等的所有映射...但是就拥有它的人而言.....没有人真正拥有C,但是ANSI / ISO确定了标准


2

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

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


1

一个非常好的问题。有一种方法可以使用严格且明确的语言以“源代码”的形式定义语言标准(而不是实现!)。不幸的是,包括C在内的所有旧语言都定义不清。但是仍然可以将这些定义转换为源代码形式。

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


1

Helgi Hrafn Gunnarsson已写出主要答案,但我认为值得一提的是,您也可以有效地使用方言。

无论编译器支持哪种标准,编译器都应该做同样的事情(如今这些几乎应该是同一版本),但是存在灰色区域。例如,编译器用于“未定义”功能的方式。如果C规范指出在特定情况下行为未定义,则编译器可以完成所需的工作。

还有一些示例,这些示例由编译器制造商添加到库中(并添加了新库),以支持特定的平台特征,创造竞争优势或只是为了使生活更轻松。愤世嫉俗的人可能建议添加其中一些内容,以帮助将人们也锁定在特定的编译器中。


1

我会说C语言不是开源的。正如许多人指出的那样,您可以免费下载GNU许可的编译器和库,但是如果您想编写自己的C编译器,则需要遵循ISO C标准,并且ISO会为C语言的规范收取大量费用。 ,在发布时为$ 178。因此,真正的答案取决于您对免费和开源感兴趣的要素。


0

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

在标准化过程中,任何人都可以参加,但是如果您想投票,则需要付费才能加入自己的国家机构(例如,美国的ANSI,英国的BSI,法国的AFNOR等等。)。通常,大多数标准团体会员资格由公司支付。就是说,这个过程是相当开放的。您可以在标准网站上访问讨论文件。

这些标准本身也不是免费的。在ISO PDF店目前的售价为198瑞士法郎的C标准。该标准的草稿副本可轻松免费找到。

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.