これはおそらくばかげた質問ですが、私はこれについてしばらく考えていました。 C(または、さらに言えば他の低レベル言語)にもソースがありますか、それともコンパイラーは、解析を含めて「すべての作業を行う」部分ですか?もしそうなら、異なるコンパイラが異なるC方言を持つことはできませんか? stdlibはこれをどこに考慮しますか?これがどのように機能するのか本当に知りたいです。
C言語はソフトウェアではなく、 定義された標準 であるため、オープンソースであるとは言えず、オープン標準であると言えます。
Cには膨大な数の異なるコンパイラがありますが、それらの多くは確かにオープンソースです。最も注目すべき例は GCCのCコンパイラ で、これはすべてオープンソースライセンスである GNU General Public License(GPL) に基づいています。
より多くのオプションがあります。 Watcom は、たとえばオープンソースです。オープンソースのCコンパイラーに不足はありませんが、間違いなく、少なくともWindows以外の世界で最も普及しているのはGCCです。
Cは、Cコンパイラがプログラムを生成する方法を指定する標準です。
音符にプラスチックがないように、C自体にもソースコードはありません。
GCCなどの一部のCコンパイラはオープンソースです。
Cは単なる言語であり、標準化された言語でもあります。 「すべての作業を行う」のはコンパイラです。コンパイラが異なれば、方言も異なります。 C99 ANSI標準以前は、C言語を独自の方法で実装するBorland Cや他の競合するコンパイラなどがありました。
stdlib
は、ANSI Cの実装に存在する必要がある標準ライブラリの合意済みのコレクションです。
他の素晴らしい答えに追加するには:
さまざまな方言について-Cにはコンパイラ固有の追加機能がいくつか追加されています。コマンドラインフラグ_-std=...
_をgccに指定して、使用するC標準を指定できます。それぞれに構文にわずかなバリエーション/追加があり、最も一般的なものはおそらく_c99
_です。
各コンパイラはいくつかの異なる追加機能を実装する傾向があります。たとえば、typeof()
はC標準にないため、コンパイラはこれを実装する必要はありませんが、それでも有用であり、ほとんどのコンパイラが提供しています。これが gcc C拡張のリスト です。
Stdlibは、C標準で指定された関数のセットです。コンパイラのように、stdlibは異なる実装を持つことができます。 GNU実装はgccと同様にオープンソースですが、他のコンパイラーがあり、クローズドソースであるstdlibの他の実装である可能性があります。
コンパイラはCからアセンブリなどへのすべてのマッピングを決定しますが、それを所有している誰かまでは.......本当にCを所有している人はいませんが、ANSI/ISOは標準を決定します
GCCのCコンパイラはCで書かれています。したがって、少なくともone CコンパイラがCで書かれていることがわかります。
GNUのstdlib
(glibc)もC(stdio.h、stdlib.h)で記述されています。ただし、アセンブリ言語で記述された部分もあります。
Helgi Hrafn Gunnarssonが主な回答を書きましたが、方言も効果的に使用できることは注目に値すると思います。
コンパイラは、サポートする標準(最近ではほとんど同じバージョンになるはずです)に関して同じことを行う必要がありますが、灰色の領域があります。たとえば、コンパイラが「未定義」機能のために機能する方法。 C仕様で動作が特定のケースで定義されていないことが示されている場合、コンパイラーは必要なことをほぼ実行できます。
特定のプラットフォームの特性をサポートするため、競争上の優位性を作成するため、または単に生活を楽にするために、コンパイラメーカーによってライブラリに追加された関数(および追加された新しいライブラリ)の例もあります。シニカルは、これらのいくつかが人々を特定のコンパイラにロックするのを助けるために追加されることを示唆するかもしれません。
言語としてのCはオープンソースではないと思います。多くの人が指摘しているように、GNUライセンスされたコンパイラとライブラリを無料でダウンロードできますが、独自のCコンパイラを作成したい場合は、ISO C標準とISO料金に従う必要があります。 C言語の仕様に対するハードキャッシュ。これは、投稿時点では178ドルです。そのため、実際の答えは、フリーでオープンソースであることに関心のある要素によって異なります。