C是开源吗?
这可能是一个愚蠢的问题,但我一直在想这个问题。 C(或任何其他低级语言)是否有源码,还是编译器是“完成所有工作”的部分,包括parsing? 如果是这样,不同的编译器是不是有不同的C语言? stdlib的因素在哪里呢? 我真的很想知道这是如何工作的。
C语言不是一个软件,而是一个明确的标准 ,所以人们不会说它是开源的,而是一个开放的标准。
然而,C语言有不同的编译器,其中许多编译器确实是开源的。 最值得注意的例子是GCC的C编译器 ,它们都是GNU通用公共许可证(GPL) ,这是一个开源许可证。
有更多的select。 例如,Watcom是开源的。 不缺less开源的C编译器,但毫无疑问,最普遍的一个,至less在非Windows世界,是GCC。
对于Windows来说,最好的办法是使用Cygwin或MinGW,或许是Watcom或GCC。
C是指定C编译器如何生成程序的标准。
C本身没有任何源代码,就像一个音符没有任何塑料。
一些C编译器,如GCC,是开源的。
C只是一种语言,也是一个标准化的语言。 编译器几乎“做所有的工作”。 不同的编译器有不同的方言; 在C99 ANSI标准之前,你有像Borland C和其他竞争编译器那样的东西,它们以他们自己的方式实现了C语言。
stdlib
只是一个需要在任何ANSI C实现中出现的标准库的商定集合。
添加到其他伟大的答案:
关于不同的方言 – 有一些额外的function,特别是编译器添加到C中。 你可以提供命令行标志-std=...
给gcc来指定你想要使用的C标准,每种语法都有细微的变化/添加语法,最常见的可能是c99
。
每个编译器都倾向于实现一些不同的额外function,例如, typeof()
不在C标准中,因此编译器不必实现这一点,但是它是有用的,大多数编译器都提供它。 这是一个gcc C扩展列表
stdlib是C标准中规定的一组函数。 很像编译器,stdlib可以有不同的实现。 GNU实现和gcc一样是开源的,但也有其他的编译器,也可能是stdlib的其他闭源实现。
编译器将确定从C到汇编等所有的映射……但就拥有它的人来说……没有人真的拥有C,但是ANSI / ISO决定了标准
GCC的C编译器是用C语言编写的,所以我们知道C中至less有一个 C编译器。
GNU的stdlib
(glibc)也是用C写的(stdio.h,stdlib.h)。 但是它也有一些用汇编语言编写的部分。
一个很好的问题。 有一种方法可以用一种严格的,无歧义的语言以“源代码”的forms来定义语言标准(不是实现!)。 不幸的是,包括C在内的所有旧语言的定义都很差。 但是仍然有可能将这些定义翻译成源代码forms。
另一种方法是通过其操作语义来定义一种语言,通常以一种简单(和无效)的参考实现的forms。
Helgi Hrafn Gunnarsson写了主要答案,但我认为值得注意的是,你也可以有效地结束方言。
编译器应该对它们所支持的任何标准做相同的事情(这些日子应该几乎都是相同的版本),但是也有灰色的地方。 例如,编译器为“未定义”function工作的方式。 如果C规范说明某个特定情况的行为是未定义的,那么编译器可以做到它想要的东西。
还有编译器制造商为了支持特定的平台特性而添加到库中的function(以及新增的库)的例子,创造竞争优势或简单地使生活更简单。 玩世不恭者可能会build议添加其中的一些来帮助将人员locking到特定的编译器中。
我会说C作为一种语言不是开源的。 正如很多人所指出的,你可以免费下载GNU许可的编译器和库,但是如果你想编写你自己的C编译器,则需要遵循ISO C标准,而ISO则收取C语言,在发布时这是$ 178。 所以真正的答案取决于你对自由和开放源代码感兴趣的元素。