C开源吗?

时间:2011-02-24 01:26:52

标签: c compiler-construction open-source

这可能是一个愚蠢的问题,但我一直在想这个问题。 C(或任何其他低级语言)是否有源,或者编译器是“完成所有工作”的部分,包括解析?如果是这样,不同的编译器不能有不同的C方言吗? stdlib在哪里因素?我真的很想知道它是如何工作的。

10 个答案:

答案 0 :(得分:127)

C语言不是一个软件而是一个defined standard,因此不会说它是开源的,而是它是一个开放的标准。

然而,C有许多不同的编译器,其中许多确实是开源的。最值得注意的例子是GCC's C compiler,它都在GNU General Public License (GPL)下,这是一个开源许可证。

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

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

答案 1 :(得分:27)

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

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

答案 2 :(得分:10)

C只是一种语言,也是一种标准化的语言。它几乎就是编译器“完成所有工作”。不同的编译器确实有不同的方言;在C99 ANSI标准之前,你有像Borland C和其他竞争编译器这样的东西,它们以自己奇妙的方式实现了C语言。

stdlib只是一个商定的标准库集合,需要出现在任何ANSI C实现中。

答案 3 :(得分:4)

添加其他好的答案:

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

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

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

答案 4 :(得分:3)

编译器会确定从C到汇编等的所有映射......但就拥有它的人来说......没有人真正拥有C但ANSI / ISO确定了标准

答案 5 :(得分:2)

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

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

答案 6 :(得分:1)

一个非常好的问题。 There is a way以严格且毫不含糊的语言以“源代码”的形式定义语言标准(不是实现!)。不幸的是,包括C在内的所有旧语言定义都很差。但仍有可能将这些定义转换为源代码形式。

另一种方法是通过其operational semantics定义一种语言,通常采用简单(和低效)参考实现的形式。

答案 7 :(得分:1)

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

编译器应该对它们支持的标准(这些日子应该几乎都是相同的版本)做同样的事情,但是有灰色区域。例如,编译器为“未定义”功能工作的方式。如果C规范说某个特定情况的行为是未定义的,那么编译器可以完成它想要的任何操作。

还有编译器制造商添加到库(以及添加的新库)中的函数的示例,以支持特定的平台特征,创建竞争优势或简单地使生活更轻松。愤世嫉俗的人可能会建议添加其中一些来帮助锁定人们进入特定的编译器。

答案 8 :(得分:0)

我会说C语言不是开源语言。 正如许多人所指出的,你可以免费下载GNU许可的编译器和库,但是如果你想编写自己的C编译器,你需要遵循ISO C标准,并且ISO收取现金用于C语言的规范,在发布时,这是178美元。 所以答案取决于你对免费和开源感兴趣的元素。

答案 9 :(得分:0)

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

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

标准本身也不是免费的。 ISO pdf store currently sells the C standard for 198 swiss francs。该标准的草稿副本可轻松免费找到。

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