ア | イ | ウ | エ | オ |
カ | キ | ク | ケ | コ |
サ | シ | ス | セ | ソ |
タ | チ | ツ | テ | ト |
ナ | ニ | ヌ | ネ | ノ |
ハ | ヒ | フ | ヘ | ホ |
マ | ミ | ム | メ | モ |
ヤ | ユ | ヨ | ||
ラ | リ | ル | レ | ロ |
ワ | ヰ | ヴ | ヱ | ヲ |
ン |
A | B | C | D | E |
F | G | H | I | J |
K | L | M | N | O |
P | Q | R | S | T |
U | V | W | X | Y |
Z | 数字 | 記号 |
GNUのコンパイラーコレクション。実行ファイル名は小文字でgccである。
多機能、高性能なソフトウェアで、多くのUNIXで使用されている。
様々なアーキテクチャーにも対応している。
Sun MicrosystemsのSolarisなどのように標準でCコンパイラーなどの開発環境が付いてこないオペレーティングシステムでは、コンパイラーを含めた開発環境をGNUシリーズで揃えてしまう人も珍しくない。
最適化の性能も、clang/LLVMが登場するまではフリーソフトウェアの中では優秀な方だった。
GCCは、CやC++に限ってみても、言語の標準仕様に対して独自の新機能を多数搭載している。この機能が、後に標準仕様に取り込まれることもある。
以下は、代表的な独自機能の例(順不同)。
GCCには様々なビルトイン関数が用意されており、殆どは __builtin_ から始まる関数名となっている。
これらは、GCCの利便性の向上やC/C++の要求仕様を実装するためのもの、あるいはGCCへの依存性を高めGCCへの囲い込みを強めることを意図したものと考えることができる。なお、これら関数は当然、次世代コンパイラーclang/LLVMでも実装されたため、clang/LLVMへの移行には支障がない。
関数の一覧は、「Other Built-in Functions Provided by GCC」に記載がある(以下、順不同)。
三項演算子と同等の機能をもつ関数
ISO C11のマクロ、CMPLXF、CMPLX、CMPLXLの実装用
プリプロセッサーの __LINE__ マクロに相当
プリプロセッサーの __FUNCTION__ マクロに相当
プリプロセッサーの __FILE__ マクロに相当
ISO Cマクロ HUGE_VAL 実装用
C99 fpclassify機能実装用
C99 nan機能実装用
xを2進数にしたとき最初に1となるビット位置を返す。つまり、__builtin_ffs(x) = 1 + __builtin_ctz(x) が成り立つ
xを2進数にしたときの頭の0の数を返す
xを2進数にしたときの末尾の0の数を返す
xを2進数にしたときの頭の最上位ビットと同じビットの数を返す
xを2進数にしたとき、ビットが1となるビットの数を返す
xのパリティを返す。つまり、__builtin_parity(x) = __builtin_popcount(x) % 2 が成り立つ
累乗を得る。pow関数とは異なり、精度と丸めについての保証がない
Richard StallmanがGCC開発に着手したのは1985(昭和60)年である。当初はPastelと呼ばれるPascalの拡張言語で書かれ、これが後にCで書き直された。GNUのコンパイラーとして始めて公開されたのは1987(昭和62)年である。
GCC 2.xからバザール形式での開発が始まり改良と拡張が続き、1994(平成6)年にリリースされた4.4BSDでも標準のコンパイラーとして採用された(4.3BSDまではPortable C Compiler)。
1999(平成11)年4月に、正式にGCC Steering CommitteeにGCCのメンテナンスが引き継がれた。これ以降、この委員会が開発していた拡張版GCCのEGCSがGCCと呼ばれるようになっている。
現在GCCは、GCC Steering Committeeの指導の下で、様々なプログラマーグループによって維持されている。
そんなGCCも、大規模化しCで記述されたもののメンテナンスも大変になったらしく、遂にC++で書き換えるcxx-conversionブランチができ、2012(平成24)年に無事にC++への書き換えに成功したという。いずれ正式バージョンもC++化されたものとなるのだろう。
BSDではGPL排除に熱心な活動が続けられており、GPL汚染を避けるための防疫処置も行なわれている。
特にGPL排除に熱心なOpenBSDでは、4.3BSD時代にも使われたBSDライセンスのPortable C Compiler(PCC)の改良版に関心を寄せている。
FreeBSDはGPLv2でライセンスされた最終版GCC 4.2.1を長く使用している。アプライアンス用途への採用も多いFreeBSDはGPLv3ツールの同梱に難色を示しており、デフォルトコンパイラーをGCCからBSDライセンスとほぼ同じclang/LLVMへ置き換える作業を進めた。
LLVMでは、GCC4から作られたフロントエンドllvm-gccも使うことができたが、あまり人気はなく、今ではサポートされていない。
長くGCCの敵はなかった。GCCは必要十分かつ強力なコンパイラーだったためである。
そんなGCC開発者はC/C++に飽きたらしく、Javaがオワコンというのは世界の共通認識と一致するものの、次の力の入れ先がなぜか「Go」だった。
さて、AppleはObjective-Cを愛用しているが、GCCはこれに力を余り注がず、その上あろう事かGPLv3にライセンスを変更したためAppleは激怒、遂に本気を出して新しいC/C++コンパイラーを作り出してしまった。
本気のAppleが実用化させた、GCCにとっての最強の敵はclang/LLVMだった。しかもこれはGPLではなく、BSDライセンス相当のソフトウェアである。
本気になったAppleからの資金や技術者の投入は生半可ではなく、登場から10年以上の歴史を持つGCCを僅か数年で凌駕し、あっという間に性能で追い抜いてしまった。Appleは「GCCはオワコン」と述べており、Appleの統合開発環境(IDE)であるXcodeも、4以降はllvmがデフォルトになり、gccはllvm-gccのシンボリックリンクに置き換わり、後のバージョンではgccは綺麗に削除された。
GCCは、ある日突然出てきたコンパイラーに、あっけなく負けたのである。
GCCは、毎年3月から5月頃に新バージョンを公開している。
2014(平成26)年4月22日にGCC 4.9が公開され、C++14のドラフト(n3797)に対応した。
しかしAppleによるclangはGCCに先んじ、2013(平成25)年12月に公開(clang/LLVMとしては2014(平成26)年1月に公開)されたclang 3.4でC++14のドラフト(n3797)完全対応を達成している。clang/LLVMの開発力はGCCを上回っており、GCCを過去の遺物だとするAppleの言い分は決して驕りや荒唐無稽な主張でないことが分かる。
このようにしてclangも完成度が高まったことから、FreeBSDは、FreeBSD 10.0からはGCCを削除してclang/LLVMに移行、脱GPLを達成した。FreeBSD派生のDragonFly BSDもDragonFly BSD 3.8からclang/LLVMに移行した。また、OpenBSDも近い将来にclang/LLVMに移行する計画である。
NetBSDはまだ定かではないが、clang/LLVMでのビルドは可能なようになっている。
ここ近年は、ほぼ1年おき、3月から5月頃に新しいバージョンを公開している。
2014(平成26)年4月22日にリリースされたバージョン。
clang/LLVMより遅れたが、C++14に対応した。
2011(平成23)年3月25日にリリースされたバージョン。
GCC 4.6.0では、次に挙げるようなObjective-C 2.0の新機能に対応した。
このほか、Go言語への対応や、__float128データ型への対応なども行なわれている。
graphiteブランチで開発されてきた最適化機構が正式に取り込まれた。for文やwhile文の繰り返し箇所で、ループ順を入れ替えるなどで高速化する。
GCC 4.2対応したOpenMPは、GCC 4.4でOpenMP 3.0対応となった。
バージョンのみ記載
バージョンのみ記載
現在GNUのファイルサーバーから入手できる最古のGCCが2.95である。
コメントなどを投稿するフォームは、日本語対応時のみ表示されます