Jaka jest różnica między C, C99, ANSI C i GNU C?

Zacząłem ćwiczyć programowanie na codechef i byłem zdezorientowany przez różnicę między C i C99. Co to znaczy "C"? Czy to C89? Sprawdź języki na dole to submit . Zawiera zarówno C jak i C99.

Znalazłem w Internecie coś o nazwie GNU C. Czy istnieje inne C dla Systemów linux / unix? Czy są one zgodne z normami C przez ANSI? Czytałem też w niektórych miejscach "C99 strict". Co to jest?

Czy są jakieś inne różne standardy C w użyciu? Czy jest coś o nazwie C 4.3.2 lub jest to wersja gcc w obecnym użyciu?

EDIT:

To, to, to pomogło. Będę szukać więcej i edytować rzeczy, które pozostają bez odpowiedzi.

Nie jestem początkującym programistą. Wiem, co to jest język C. Wiem, że istnieją różne standardy C przez ANSI, takie jak C89, C99 i C11.

Author: Community, 2013-06-20

5 answers

  • Wszystko przed standaryzacją jest ogólnie nazywane "K & R C", po słynnej książce , z Dennisem Ritchie, wynalazcą języka C, jako jednym z autorów. Był to "język C" w latach 1972-1989.

  • Pierwszy standard C został wydany w 1989 roku w Stanach Zjednoczonych przez national standard institute ANSI. To wydanie nosi nazwę C89 lub ANSI-C. W latach 1989-1990 był to "język C".

  • Rok później amerykański standard był przyjęty na arenie międzynarodowej i opublikowany przez ISO (ISO 9899: 1990). To wydanie nosi nazwę C90. Technicznie jest to ten sam standard Co C89 / ANSI-C. formalnie zastąpił C89 / ANSI-C, czyniąc je przestarzałymi. W latach 1990-1999 C90 był "językiem C".

    Proszę zauważyć, że od 1989 roku ANSI nie ma nic wspólnego z językiem C. Programiści wciąż mówiący o" ANSI C " generalnie nie mają pojęcia, co to znaczy. ISO "posiada" Język C, poprzez standard ISO 9899.

  • W 1999 roku zmieniono standard C, wiele się zmieniło (ISO 9899: 1999). Ta wersja standardu nosi nazwę C99. W latach 1999-2011 był to "język C".

  • W 2011 roku ponownie zmieniono standard C (ISO 9899: 2011). Ta wersja nosi nazwę C11. Różne nowe funkcje, takie jak _Generic, _Static_assert do języka dodano obsługę wątków. Aktualizacja miała duży nacisk na wielordzeniowe, wielordzeniowe przetwarzanie i sekwencjonowanie wyrażeń. W latach 2011-2017 był "językiem C".

  • W 2017, C11 został zmieniony i różne raporty usterek zostały rozwiązane. Standard Ten nieformalnie nazywany C17 i został wydany jako ISO 9899: 2018. Nie zawiera żadnych nowych funkcji, tylko poprawki. Jest to aktualna wersja języka C.


" C99 strict " prawdopodobnie odnosi się do Ustawienia kompilatora zmuszającego kompilator do przestrzegania standardu przez literę. W standardzie C istnieje termin zgodny z implementacją. Zasadniczo to znaczy: "kompilator ten faktycznie poprawnie implementuje język C". Programy, które poprawnie implementują język C są formalnie nazywane programami ściśle zgodnymi }.

"GNU C" może oznaczać dwie rzeczy. Albo kompilator C, który jest częścią GNU Compiler Collection (GCC). Może też oznaczać niestandardową domyślną konfigurację, której używa kompilator GCC C. Jeśli kompilujesz z gcc program.c, to nie kompilujesz zgodnie ze standardem C, a raczej niestandardową konfiguracją GNU, który może być określany jako "GNU C". Na przykład, całe jądro Linuksa jest wykonane w niestandardowym GNU C, a nie w standardowym C.

Jeśli chcesz skompilować swoje programy zgodnie ze standardem C, powinieneś wpisać gcc -std=c99 -pedantic-errors. Zastąp c99 na c11, jeśli Twoja wersja GCC go obsługuje.

 165
Author: Lundin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-09 07:46:20

Muszę odpowiedzieć w sprawie ANSI C. Chociaż ANSI nic z nim nie zrobił, Kompilatory są nadal do niego zbudowane. Na przykład kompilator PIC XC16: "Kompilator jest w pełni zweryfikowanym kompilatorem, który jest zgodny z ANSI C standard zdefiniowany przez specyfikację ANSI (ANSI x3. 159-1989) oraz opisany w Kernighan i Ritchie ' s the C Programming Language (second edycja). ..." Nie wszystkie programy są przeznaczone dla" dużych " komputerów, takich jak komputery PC. Napisanie kompilatora dla Twojego urządzenia kosztuje, a czas walidacji kosztów&$. ANSI C is alive & well & życie w urządzeniach wbudowanych / działających w czasie rzeczywistym.

 6
Author: C Is Better,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-01-27 22:29:05
  • ANSI C : Pierwszy język C został standaryzowany przez ciało o nazwie ANSI w 1989 roku, dlatego nazywa się c89.

  • C99:
    w latach 1999-2000 do C99 dołączono kolejne lub dodatkowe słowa kluczowe i funkcje (np. inline, boolean.. Dodano zmiennoprzecinkowe funkcje biblioteki arthematycznej)

  • GNU C: GNU jest uniksopodobnym systemem operacyjnym (www.gnu.org) & gdzieś Projekt GNU potrzebuje języka programowania C oparty na standardzie ANSI C. GNU używa kompilatora GCC (GNU Compiler Collection) do kompilacji kodu. Posiada funkcję biblioteki C, która definiuje wywołania systemowe takie jak malloc, calloc, exit...etc

ANSI C jest standardem, który jest używany przez lub recenzowane inne standardy.

 5
Author: Kapil Chittewan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-06-20 07:01:49

Oprócz Lundin Odpowiedz

Oto co Dennis Richie ma do powiedzenia na pytanie

"dlaczego K & R nie czekał na ostateczny, zatwierdzony standard ANSI przed napisaniem K&R 2nd edition?"

Dlaczego K & R nie czekał na ostateczny, zatwierdzony standard ANSI przed napisaniem K & R 2nd edition? Wydaje się, że ta książka będzie jedynie właściwym standardem dla kilka miesięcy wcześniej zostanie pokonany przez ostateczny standard ANSI. Wiem. że na tak późnym etapie prawdopodobnie nastąpi kilka istotnych zmian, ale dlaczego nie poczekaj kilka miesięcy i upewnij się, że masz 100% rację, zamiast konieczności prawie natychmiast napisać 3 wydanie lub być przestarzałe?

Pomyśleliśmy, że byłoby miło uczcić 10-lecie pierwszej edycji. Bardziej poważnie, zaczęliśmy pracę zeszłego lata, ponieważ mieliśmy czasu i nachylenia, a potem okazało się, że x3j11 zbliża się koniec. W Grudniu a stycznia, gdy kończyliśmy, rozważaliśmy czy możliwość istotnych zmian uzasadnia odkładanie dostawy, oraz (po omówieniu sprawy z wydawcą) uznałem, że nie warto czekać. P-H chciał, i to i to Brian i ja chcieliśmy to wyłączyć z naszych planów.

Nawet jeśli są zmiany w standardzie, trudno sobie wyobrazić że będą na tyle obszerne, by uzasadnić nowe wydanie. (Byliśmy nawet przygotowani, aby jakoś poradzić sobie z noalias, gdyby to trwało.) Jesteśmy gotowi wprowadzić niezbędne zmiany w przyszłym druku, ale jest powód, aby mieć nadzieję, że powinny być drobne. X3J11 ' s członkowie bardzo pragną zakończyć bez zaskakiwania ludzi, także; wiele z nich pracuje dla firm przygotowujących Kompilatory ANSI, w końcu.

Dennis Ritchie

 1
Author: Suraj Jain,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:26:34

To pytanie nie zostało dokładnie przeszukane w sieci dla odpowiedzi, w każdym razie możesz spojrzeć na to:

  1. C jest językiem programowania ogólnego przeznaczenia, początkowo rozwijanym przez Dennis Ritchie w latach 1969-1973 w AT & T Bell Labs.
  2. C99 jest standardem języka C opublikowanym przez ISO i przyjętym przez ANSI około 1999 roku.
  3. GNU C jest tylko rozszerzeniem c89, podczas gdy niektóre funkcje c99 są również dodane, ale w całości różni się od standardu c99, więc podczas kompilacji w gcc musimy wpisać -std=c99, który jest już wspomniany w pozostałych odpowiedziach.
  4. ANSI C to kolejna seria standardów wydawanych przez ANSI.
 -3
Author: 0decimal0,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-06-20 12:32:19