web-dev-qa-db-ja.com

C、C99、ANSI CとGNU Cの違いは何ですか?

codechef でプログラミングの練習を始めましたが、CとC99のの違いに混乱しています。ここでCはどういう意味ですか? C89ですか?this submit の下部にある言語を確認してください。 CとC99の両方が含まれています。

インターネットでGNU Cと呼ばれるものを見つけました。Linux/ unixシステム用に別のCがありますか?これらはANSIのC標準に準拠していますか?また、いくつかの場所で「C99 strict」を読みました。これは何ですか?

使用中のCの他の異なる標準はありますか? C 4.3.2と呼ばれるものはありますか、それとも現在使用されているgccバージョンですか?

編集:

ThisThisThis 助けた。さらに検索して、未回答の項目を編集します。

私はプログラミング初心者ではありません。私はC言語が何であるかを知っています。 ANSIには、C89、C99、C11などのさまざまなC標準があることがわかっています。

114
Aseem Bansal
  • 標準化前のすべては、一般的に「K&R C」と呼ばれ、 有名な本 の後に、著者の1人としてC言語の発明者であるデニスリッチーがいます。これは1972-1989年の「C言語」でした。

  • 最初のC標準は、国家標準機関ANSIによって1989年に米国で全国的にリリースされました。このリリースはC89またはANSI-Cと呼ばれます。 1989-1990から、これは「C言語」でした。

  • その翌年、アメリカの規格は国際的に受け入れられ、ISOによって公開されました(ISO 9899:1990)。このリリースはC90と呼ばれます。技術的には、C89/ANSI-Cと同じ標準です。正式には、C89/ANSI-Cに取って代わり、廃止されました。 1990年から1999年まで、C90は「C言語」でした。

    1989年以来、ANSIはC言語とは関係がないことに注意してください。 「ANSI C」についていまだに話しているプログラマーは、一般にそれが何を意味するのか手がかりを持っていません。 ISOは、標準のISO 9899を通じてC言語を「所有」しています。

  • 1995年にマイナーアップデートがリリースされ、「C95」と呼ばれることもありました。これは大規模な改訂ではなく、正式にISO/IEC 9899:1990/AMD.1:1995と命名された技術的修正です。主な変更点は、ワイドキャラクターのサポートの導入でした。

  • 1999年に、C標準は大幅に改訂されました(ISO 9899:1999)。このバージョンの標準はC99と呼ばれます。 1999年から2011年まで、これは「C言語」でした。

  • 2011年に、C標準が再び変更されました(ISO 9899:2011)。このバージョンはC11と呼ばれます。 _Generic_Static_assertなどのさまざまな新機能とスレッドのサポートが言語に追加されました。このアップデートでは、マルチコア、マルチプロセッシング、および発現シーケンスに重点が置かれました。 2011年から2017年まで、これは「C言語」でした。

  • 2017年には、C11が改訂され、さまざまな欠陥レポートが解決されました。この標準は非公式にC17と呼ばれ、ISO 9899:2018としてリリースされました。新しい機能は含まれておらず、修正されています。これは、C言語の現在のバージョンです。


「C99 strict」は、コンパイラーが文字で標準に従うことを強制するコンパイラー設定を指している可能性があります。 C規格には準拠の実装という用語があります。基本的に、「このコンパイラは実際にC言語を正しく実装します」という意味です。 C言語を正しく実装するプログラムは、正式に厳密に準拠するプログラムと呼ばれます。

「GNU C」には2つの意味があります。 GNU Compiler Collection(GCC)の一部として提供されるCコンパイラ自体。または、GCC Cコンパイラが使用する非標準のデフォルト設定を意味する場合があります。 gcc program.cでコンパイルする場合、C標準に従ってコンパイルするのではなく、「GNU C」と呼ばれる非標準のGNUセットアップに従ってコンパイルします。たとえば、Linuxカーネル全体は、標準Cではなく非標準GNU Cで作成されます。

C標準に従ってプログラムをコンパイルする場合は、gcc -std=c99 -pedantic-errorsと入力する必要があります。 GCCバージョンでサポートされている場合は、c99をc11に置き換えます。

194
Lundin

私はANSI Cに関して応答しなければなりません。ANSIは何もしていませんが、コンパイラはまだそれに対応しています。たとえば、PIC XC16コンパイラ:「コンパイラは、ANSI仕様(ANSI x3.159-1989)で定義され、Kernighan and RitchieのThe C Programming Language(第2版)で定義されているANSI C標準に準拠する完全に検証されたコンパイラです。 ...」すべてのプログラミングが、PCのような「大型」コンピューター用ではありません。デバイスのコストに合わせてコンパイラを作成し、検証に時間と費用がかかります。 ANSI Cは、組み込み/リアルタイムデバイスで生き生きしています。

7
C Is Better
  • ANSI C:最初のC言語は、1989年にANSIと呼ばれる団体によって標準化されたため、c89と呼ばれています。

  • C99:
    開発者の要求に応えて、1999-2000年にC99に追加または追加のキーワードと機能が追加されました(例:インライン、ブール値。浮動小数点アーティマティックライブラリ関数の追加)

  • GNU C:GNUはUnixのようなオペレーティングシステム(www.gnu.org)であり、GNUのプロジェクトにはANSI C標準に基づくCプログラミング言語が必要です。 GNUは、GCC(GNU Compiler Collection)コンパイラを使用してコードをコンパイルします。 malloc、calloc、exit ... etcなどのシステムコールを定義するCライブラリ関数があります。

ANSI Cは、他の標準で使用または参照されている標準です。

5
Kapil Chittewan

ランディンに加えて 回答

デニス・リッチーがしなければならないことはここにあります Say 尋ねられたとき

「K&Rは、K&R第2版を作成する前に、最終的な承認済みANSI標準を待たなかったのはなぜですか?」

K&R第2版を作成する前に、承認された最終ANSI標準をK&Rが待たなかったのはなぜですか?この本は、最終的なANSI規格に準拠するまで、数か月間は正しい規格にすぎないようです。この後期段階で大きな変更はほとんどないことを知っていますが、ほとんどすぐに第3版を作成したり時代遅れになったりする必要はなく、数か月待って100%正しく設定してください。

初版の10周年を記念するのはいいことだと思いました。もっと深刻なことに、私たちはその時間と傾向があったので、去年の夏に仕事を始めました、そして、X3J11は終わりに近づいているように見えました。 12月と1月に、私たちは終了時に重要な変更の可能性が配達を延期することを正当化するかどうかを検討し、(出版社と問題を議論した後)待つ価値がないと判断しました。 P-Hはそれを望んでおり、ブライアンと私は私たちのアジェンダからそれを望んでいました。

規格に変更があったとしても、それらが新しいエディションを保証するのに十分な広さになるとは想像しにくいです。 (noaliasが続いた場合は、どうにかして対処する用意さえありました。)将来の印刷で必要な変更を加える準備はできていますが、それらがマイナーであることを期待する理由があります。 X3J11のメンバーも、驚くような人なしで終了することを非常に切望しています。結局、それらの多くはANSIコンパイラを準備している企業で働いています。

デニスリッチー

1
Suraj Jain