1. ホーム
  2. c

[解決済み] C、C99、ANSI C、GNU Cの違いは何ですか?

2022-05-05 14:54:13

質問内容

のプログラミング練習を開始しました。 コーデック という文字列が表示され、混乱しています。 CとC99の違い。ここでいうCとは何でしょうか?C89なのでしょうか? の一番下にある言語を確認してください。 このサブミット . CとC99の両方が含まれています。

インターネットでGNU Cというのを見つけたのですが、linux/unix系には別のCがあるのでしょうか?これらは、ANSIによるCの規格に準拠しているのでしょうか?また、あるところで "C99 strict" と書いてありました。これは何ですか?

他に違う規格のC言語が使われているのでしょうか?C 4.3.2というのがあるのでしょうか、それとも現在使われているgccのバージョンなのでしょうか?

EDIT

これは , この , この が役立ちました。もっと検索して未回答のものを編集してみます。

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

どのように解決するのですか?

  • 標準化以前のものを一般に「K&R C"」と呼びますが、これは有名な本( 第1版 第2版 )で、C言語の発明者であるデニス・リッチーが著者の一人として名を連ねています。これが1972年から1989年までの「C言語」である。

  • C言語の最初の規格は、1989年にアメリカの国立標準化機構ANSIから発表された。このリリースは、C89またはANSI-Cと呼ばれています。1989年から1990年まで、これがC言語でした。

  • その翌年、アメリカの規格が国際的に認められ、ISOで発行された(ISO 9899:1990)。このリリースはC90と呼ばれています。技術的には、C89/ANSI-Cと同じ規格です。形式的には、C89/ANSI-Cに取って代わり、それらを時代遅れにしたものです。1990年から1999年まで、C90は"the C language"でした。

    なお、1989年以降、ANSIはC言語とは何の関係もない。プログラマーはいまだに "ANSI C" について話していますが、一般にそれが何を意味するのかわかっていないようです。ISOはISO 9899という規格を通してC言語を所有しています。

  • 1995年にマイナーアップデートが発表され、quot;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またはC18と呼ばれています。2017年に完成した(そして、使用する __STDC_VERSION__ = 201710L )が、ISOから9899:2018としてリリースされたため、C17/C18のあいまいな表現になっています。新機能は含まれず、修正のみ。C言語の現行バージョンである。


C99 strict"は、コンパイラが規格に忠実に従うように強制するコンパイラの設定のことだと思われます。C99ストリクトという用語があります。 適合する実装 C言語規格の 基本的には、「このコンパイラはC言語を正しく実装している」という意味です。C言語を正しく実装しているプログラムは、正式には 厳密適合プログラム .

GNU C"は、2つの意味を持ちます。GNU Compiler Collection (GCC)の一部として提供されているCコンパイラそのものを意味する場合と、GNU C"の一部として提供されているCコンパイラそのものを意味する場合です。あるいは、GCC Cコンパイラが使う標準外のデフォルトの設定を意味することもあります。もし、あなたが gcc program.c という場合、Cの標準に従ってコンパイルするのではなく、非標準のGNUの設定にしたがってコンパイルします。たとえば、Linuxカーネル全体は標準のCではなく、非標準のGNU Cで作られています。

C言語標準に従ってプログラムをコンパイルしたい場合は、次のように入力します。 gcc -std=c99 -pedantic-errors . あなたのGCCのバージョンがサポートしている場合は、c99をc11に置き換えてください。