ANSI C - ANSI C

ANSI C , ISO C i Standard C to kolejne standardy dla języka programowania C opublikowane przez Amerykański Narodowy Instytut Normalizacyjny (ANSI) i Międzynarodową Organizację Normalizacyjną (ISO). Historycznie nazwy odnosiły się konkretnie do oryginalnej i najlepiej obsługiwanej wersji standardu (znanej jako C89 lub C90 ). Twórcy oprogramowania piszący w C są zachęcani do przestrzegania standardów, ponieważ pomaga to w przenoszeniu między kompilatorami.

Historia i perspektywy

Pierwszy standard dla języka C został opublikowany przez ANSI. Chociaż dokument ten został później przyjęty przez Międzynarodową Organizację Normalizacyjną (ISO), a kolejne wersje opublikowane przez ISO zostały przyjęte przez ANSI, „ANSI C” jest nadal używane w odniesieniu do normy. Podczas gdy niektórzy programiści używają terminu ISO C, inni są neutralni pod względem standardów i używają standardu C.

Standaryzacja C

W 1983 roku American National Standards Institute utworzył komitet X3J11, aby ustalić standardową specyfikację C. W 1985 roku opublikowano pierwszy Standardowy Projekt, czasami określany jako C85 . W 1986 roku opublikowano inny projekt standardu, czasami określany jako C86 . Wersja wstępna Standard C została opublikowana w 1988 roku i czasami określana jest jako C88 .

C89

Standard ANSI został ukończony w 1989 roku i ratyfikowany jako ANSI X3.159-1989 „Język programowania C”. Ta wersja języka jest często określana jako „ANSI C”. Później czasami używa się etykiety „C89”, aby odróżnić ją od C90, ale przy użyciu tej samej metody etykietowania.

C90

Ta sama norma, co C89, została ratyfikowana przez Międzynarodową Organizację Normalizacyjną jako ISO/IEC 9899:1990, z jedynie zmianami formatowania, co jest czasami określane jako C90. Dlatego terminy „C89” i „C90” odnoszą się zasadniczo do tego samego języka.

Norma ta została wycofana zarówno przez ANSI/INCITS, jak i ISO/IEC.

C95

W 1995 roku ISO opublikowało rozszerzenie o nazwie Poprawka 1 dla standardu ANSI-C. Jego pełna nazwa ostatecznie brzmiała ISO/IEC 9899:1990/AMD1:1995 lub przydomek C95 . Oprócz korekcji błędów wprowadzono dalsze zmiany w możliwościach językowych, takie jak:

  • Ulepszony wielobajtowe i szeroki charakter wsparcia w bibliotece standardowej, wprowadzając <wchar.h>i <wctype.h>jak i wielo-bajtowy I / O
  • Dodanie dwuznaków do języka
  • Specyfikacja standardowych makr dla alternatywnej specyfikacji operatorów, np. andfor&&
  • Specyfikacja standardowego makra __STDC_VERSION__

Oprócz poprawki, ISO opublikowało dwa sprostowania techniczne dla C90:

  • ISO/IEC 9899:1990/Cor 1:1994 TCOR1 w 1994 r.
  • ISO/IEC 9899:1990/Cor 2:1996 w 1996 r.

Test preprocesora pod kątem zgodności z C95

#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199409L

/* C95 compatible source code. */
#elif defined(__STDC__)
/* C89 compatible source code. */
#endif

C99

W marcu 2000 roku ANSI przyjęła normę ISO/IEC 9899:1999. Ten standard jest powszechnie określany jako C99. Niektóre godne uwagi dodatki do poprzedniego standardu obejmują:

Trzy poprawki techniczne zostały opublikowane przez ISO dla C99:

  • ISO/IEC 9899:1999/Cor 1:2001(E)
  • ISO/IEC 9899:1999/Cor 2:2004(E)
  • ISO/IEC 9899:1999/Cor 3:2007(E), godne uwagi z powodu wycofania standardowej funkcji biblioteki pobiera

Norma ta została wycofana zarówno przez ANSI/INCITS, jak i ISO/IEC na rzecz C11.

C11

C11 został oficjalnie ratyfikowany i opublikowany 8 grudnia 2011 r. Godne uwagi funkcje obejmują ulepszoną obsługę Unicode , wyrażenia ogólne z użyciem nowego _Genericsłowa kluczowego, wieloplatformowy wielowątkowy interfejs API ( threads.h) oraz obsługę typów atomowych zarówno w języku podstawowym, jak i w bibliotece ( stdatomic.h).

Jedno techniczne sprostowanie zostało opublikowane przez ISO dla C11:

  • ISO/IEC 9899:2011/Cor 1:2012

C17

Od października 2018 roku, „C17” jest obecna norma dla języka programowania C .

C17 rozwiązuje defekty w C11 bez wprowadzania nowych funkcji językowych.

C2x

C2x to nieformalna nazwa następnej (po C17 ) głównej rewizji standardu języka C.

Inne powiązane publikacje ISO

W ramach procesu normalizacji ISO publikuje również raporty techniczne i specyfikacje związane z językiem C:

  • ISO / IEC TR 19769: 2004, na rozszerzeniach bibliotek do obsługi formatów transformacji Unicode, zintegrowanych z C11
  • ISO / IEC TR 24731-1: 2007, na rozszerzeniach bibliotek do obsługi interfejsów sprawdzonych granic, zintegrowanych z C11
  • ISO/IEC TR 18037:2008, na wbudowanych rozszerzeniach C
  • ISO / IEC TR 24732: 2009, na dziesiętnej arytmetyce zmiennoprzecinkowej , zastąpione przez ISO / IEC TS 18661-2: 2015
  • ISO/IEC TR 24747:2009, o specjalnych funkcjach matematycznych,
  • ISO / IEC TR 24731-2: 2010, na rozszerzeniach bibliotek do obsługi funkcji dynamicznej alokacji
  • ISO/IEC TS 17961:2013, w sprawie bezpiecznego kodowania w C
  • ISO / IEC TS 18661-1: 2014, na IEC 60559: 2011 -kompatybilna binarna arytmetyka zmiennoprzecinkowa
  • ISO / IEC TS 18661-2: 2015, zgodna z normą IEC 60559: 2011 arytmetyka dziesiętna zmiennoprzecinkowa
  • ISO / IEC TS 18661-3: 2015, na IEC 60559: 2011 zgodnej wymiany i rozszerzonych typów zmiennoprzecinkowych
  • ISO/IEC TS 18661-4:2015, na temat funkcji uzupełniających zgodnych z normą IEC 60559:2011

Więcej specyfikacji technicznych jest w trakcie opracowywania i oczekuje na zatwierdzenie, w tym piątą i ostatnią część TS 18661, specyfikację pamięci transakcyjnej oprogramowania i równoległe rozszerzenia bibliotek.

Wsparcie od głównych kompilatorów

ANSI C jest teraz obsługiwany przez prawie wszystkie powszechnie używane kompilatory. GCC i Clang to dwa popularne obecnie kompilatory języka C. Oba są oparte na C11 z aktualizacjami zawierającymi zmiany z późniejszych specyfikacji, takich jak C17 i C18. Każdy kod źródłowy napisany tylko w standardzie C i bez żadnych założeń dotyczących sprzętu gwarantuje poprawną kompilację na dowolnej platformie z implementacją zgodną z C. Bez takich środków ostrożności większość programów może kompilować się tylko na określonej platformie lub z określonym kompilatorem, na przykład z powodu użycia niestandardowych bibliotek, takich jak biblioteki GUI , lub polegania na atrybutach specyficznych dla kompilatora lub platformy takie jak dokładny rozmiar niektórych typów danych i endianowość bajtów .

Wykrywalność zgodności

Aby złagodzić różnice między K&R C a standardem ANSI C, __STDC__do podziału kodu na sekcje ANSI i K&R można użyć makra („standard c”).

 #if defined(__STDC__) && __STDC__
 extern int getopt(int, char * const *, const char *);
 #else
 extern int getopt();
 #endif

W powyższym przykładzie prototyp jest używany w deklaracji funkcji dla implementacji zgodnych z ANSI, podczas gdy przestarzała deklaracja niebędąca prototypem jest używana w przeciwnym razie. Są one nadal zgodne z ANSI od C99. Zwróć uwagę, jak ten kod sprawdza zarówno definicję, jak i ocenę: dzieje się tak, ponieważ niektóre implementacje mogą mieć wartość __STDC__zero, aby wskazać niezgodność z ANSI.

Kompilatory obsługujące ANSI C

Zobacz też

Bibliografia

  1. ^ Brad Kelechava (14.09.2017). „Pochodzenie ANSI C i ISO C” . Pobrano 2018-08-14 .
  2. ^ Richard Hale Shaw (wrzesień 1988). „Standard C: ANSI Projekt dorasta”. Magazyn PC . Tom. 7 nie. 15. s. 116-117.
  3. ^ „Standardy – Korzystanie z kolekcji kompilatorów GNU (GCC)” . Pobrano 24.06.2012 .
  4. ^ „INCITS/ISO/IEC 9899” . www.techstreet.com . Pobrano 2018-10-03 .
  5. ^ "ISO/IEC 9899:1990 - Języki programowania - C" . Pobrano 24.06.2012 .
  6. ^ Clive DW Pióro (2010-09-12). „Krótki opis dodatku normatywnego 1” .
  7. ^ „ISO/IEC 9899: 1990/Poprawka 1: 1995” . Międzynarodowa Organizacja Normalizacyjna. 2013-03-22.
  8. ^ „ISO/IEC 9899:1990/Kor 1:1994” . ISO . Pobrano 21.01.2019 .
  9. ^ „ISO/IEC 9899:1990/Cor 2:1996” . ISO . Pobrano 21.01.2019 .
  10. ^ 14:00-17:00. „ISO/IEC 9899:1999” . ISO . Pobrano 21.01.2019 .CS1 maint: nazwiska liczbowe: lista autorów ( link )
  11. ^ „INCITS/ISO/IEC 9899-2012” . ANSI.
  12. ^ "ISO/IEC 9899:1999 - Języki programowania - C" . Pobrano 24.06.2012 .
  13. ^ „ISO/IEC 9899:2011/Cor 1:2012” . Międzynarodowa Organizacja Normalizacyjna.
  14. ^ "ISO/IEC 9899:2018 - Informatyka - Języki programowania - C" . www.iso.org .
  15. ^ "Standard - C" . www.iso-9899.info .
  16. ^ „Historia C” . cpreferencja .
  17. ^ „ISO/IEC TR 19769:2004” . Międzynarodowa Organizacja Normalizacyjna.
  18. ^ „ISO/IEC TR 24731-1: 2007” . Międzynarodowa Organizacja Normalizacyjna.
  19. ^ „ISO/IEC TR 18037: 2008” . Międzynarodowa Organizacja Normalizacyjna.
  20. ^ „ISO/IEC TR 24732: 2009” . Międzynarodowa Organizacja Normalizacyjna.
  21. ^ „ISO/IEC TR 24747:2009” . Międzynarodowa Organizacja Normalizacyjna.
  22. ^ „ISO/IEC TR 24731-2: 2010” . Międzynarodowa Organizacja Normalizacyjna.
  23. ^ „ISO/IEC TS 17961:2013” . Międzynarodowa Organizacja Normalizacyjna.
  24. ^ „ISO/IEC TS 18661-1: 2014” . Międzynarodowa Organizacja Normalizacyjna.
  25. ^ „ISO/IEC TS 18661-2: 2015” . Międzynarodowa Organizacja Normalizacyjna.
  26. ^ „ISO/IEC TS 18661-3:2015” . Międzynarodowa Organizacja Normalizacyjna.
  27. ^ „ISO/IEC TS 18661-4: 2015” . Międzynarodowa Organizacja Normalizacyjna.
  28. ^ Zobacz listę na https://en.cppreference.com/w/c/experimental Odwiedzono 16 stycznia 2016.
  29. ^ „Korzystanie z GNU Compiler Collection (GCC): Standardy” . gcc.gnu.org . Pobrano 05.02.2019 .
  30. ^ „Zgodność językowa” . clang.llvm.org . Pobrano 05.02.2019 .
  31. ^ "Standardowe predefiniowane nazwy makr" . www.ibm.com . Źródło 2019-04-10 .
  32. ^ "Pakiet programisty HP C/ANSI C" . Pobrano 2015-07-12 .
  33. ^ Wsparcie dla ISO C11 dodane do kompilatorów IBM XL C/C++
  34. ^ link do stron Pelles C

Dalsza lektura

Zewnętrzne linki